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: