Per entrambi i repository, puoi utilizzare @Query
annotazione per specificare una stringa di query JSON MongoDB che verrà utilizzata al posto della query derivata dal nome del metodo (devi sapere che esiste una convenzione per l'analisi dei nomi dei metodi del repository e per la creazione di query MongoDB).
Quindi, usando @Query
, puoi fare:
@Repository
public interface ManagerRepository extends MongoRepository<Employee, String>
@Query(value="{ '_class' : 'com.igmtechnology.gravity.core.init.test.Manager' }")
List<Person> findAllManagers();
}
Dietro le quinte, questo genererà una query, simile a questa:
db.person.findAll({'_class' ; 'com.igmtechnology.gravity.core.init.test.Manager'});
Tuttavia, c'è un piccolo problema con questo codice. Se modifichi il nome completo della classe di Manager
, la query non genererebbe una RuntimeException
, ma non restituirei nulla. In questo caso puoi utilizzare un carattere jolly all'interno di @Query
.
@Query(value="{ '_class' : ?0 }")
List<Person> findAllManagers(String className);
Quindi, quando invochi il metodo, puoi semplicemente fare:
managerRepository.findAllManagers(Manager.class.getName());
Il Manager.class.getName()
fornito sostituirà il ?0
jolly e la tua query verrà creata correttamente.
Lo stesso vale per il Employee
repository con la differenza che devi fornire il nome completo della classe di Employee
nella @Query
il value
di attributo.
Maggiori informazioni: