MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Le référentiel Spring lance automatiquement des entités avec différents types de classe

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 :