Pour les deux référentiels, vous pouvez utiliser le @Query
annotation pour spécifier une chaîne de requête MongoDB JSON qui sera utilisée à la place de la requête dérivée du nom de la méthode (vous devez savoir qu'il existe une convention pour analyser les noms de méthode du référentiel et pour créer des requêtes MongoDB).
Donc, en utilisant @Query
, vous pouvez faire :
@Repository
public interface ManagerRepository extends MongoRepository<Employee, String>
@Query(value="{ '_class' : 'com.igmtechnology.gravity.core.init.test.Manager' }")
List<Person> findAllManagers();
}
Dans les coulisses, cela générera une requête, similaire à celle-ci :
db.person.findAll({'_class' ; 'com.igmtechnology.gravity.core.init.test.Manager'});
Cependant, il y a un problème mineur avec ce code. Si vous modifiez le nom de classe complet de Manager
, la requête ne lancerait pas de RuntimeException
, mais ne renverrait rien. Dans ce cas, vous pouvez utiliser un caractère générique dans le @Query
.
@Query(value="{ '_class' : ?0 }")
List<Person> findAllManagers(String className);
Ensuite, lorsque vous invoquez la méthode, vous pouvez simplement faire :
managerRepository.findAllManagers(Manager.class.getName());
Le Manager.class.getName()
fourni remplacera le ?0
joker et votre requête sera construite correctement.
Il en va de même pour l'Employee
référentiel à la différence que vous devez fournir le nom de classe complet de Employee
dans le @Query
la value
de attribut.
Plus d'informations :