Voor beide repositories kunt u de @Query
. gebruiken annotatie om een MongoDB JSON-querystring op te geven die zal worden gebruikt in plaats van een query die is afgeleid van de naam van de methode (u moet weten dat er een conventie is voor het ontleden van de methodenamen van de repository en voor het bouwen van MongoDB-query's).
Dus, door @Query
. te gebruiken , je kunt het volgende doen:
@Repository
public interface ManagerRepository extends MongoRepository<Employee, String>
@Query(value="{ '_class' : 'com.igmtechnology.gravity.core.init.test.Manager' }")
List<Person> findAllManagers();
}
Achter de schermen zal dit een zoekopdracht genereren, vergelijkbaar met deze:
db.person.findAll({'_class' ; 'com.igmtechnology.gravity.core.init.test.Manager'});
Er is echter een klein probleempje met deze code. Als je de volledig gekwalificeerde klasnaam van Manager
wijzigt , dan zou de query geen RuntimeException
. genereren , maar zou niets teruggeven. In dit geval kunt u een jokerteken gebruiken binnen de @Query
.
@Query(value="{ '_class' : ?0 }")
List<Person> findAllManagers(String className);
Als u de methode vervolgens aanroept, kunt u het volgende doen:
managerRepository.findAllManagers(Manager.class.getName());
De verstrekte Manager.class.getName()
vervangt de ?0
jokerteken en uw zoekopdracht wordt correct opgebouwd.
Hetzelfde geldt voor de Employee
repository met het verschil dat u de volledig gekwalificeerde klassenaam van Employee
moet opgeven in de @Query
's value
attribuut.
Meer info: