MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Das Spring-Repository wandelt automatisch Entitäten mit unterschiedlichen Klassentypen um

Für beide Repositorys können Sie die @Query verwenden -Anmerkung, um eine MongoDB-JSON-Abfragezeichenfolge anzugeben, die anstelle der vom Namen der Methode abgeleiteten Abfrage verwendet wird (Sie müssen wissen, dass es eine Konvention zum Analysieren der Methodennamen des Repositorys und zum Erstellen von MongoDB-Abfragen gibt).

Also mit @Query , können Sie Folgendes tun:

@Repository
public interface ManagerRepository extends MongoRepository<Employee, String>

  @Query(value="{ '_class' : 'com.igmtechnology.gravity.core.init.test.Manager' }")
  List<Person> findAllManagers();

}

Hinter den Kulissen wird dadurch eine Abfrage ähnlich der folgenden generiert:

db.person.findAll({'_class' ; 'com.igmtechnology.gravity.core.init.test.Manager'});

Es gibt jedoch ein kleines Problem mit diesem Code. Wenn Sie den vollständig qualifizierten Klassennamen von Manager ändern , dann würde die Abfrage keine RuntimeException auslösen , würde aber nichts zurückgeben. In diesem Fall können Sie innerhalb der @Query einen Platzhalter verwenden .

@Query(value="{ '_class' : ?0 }")
List<Person> findAllManagers(String className);

Wenn Sie dann die Methode aufrufen, können Sie einfach Folgendes tun:

managerRepository.findAllManagers(Manager.class.getName());

Der bereitgestellte Manager.class.getName() ersetzt den ?0 Platzhalter und Ihre Abfrage wird ordnungsgemäß erstellt.

Gleiches gilt für den Employee -Repository mit dem Unterschied, dass Sie den vollqualifizierten Klassennamen von Employee angeben müssen in der @Query value von Attribut.

Weitere Informationen: