Para ambos repositorios, puede usar @Query
anotación para especificar una cadena de consulta MongoDB JSON que se usará en lugar de la consulta derivada del nombre del método (debe saber que existe una convención para analizar los nombres de los métodos del repositorio y para crear consultas MongoDB).
Entonces, usando @Query
, puedes hacer:
@Repository
public interface ManagerRepository extends MongoRepository<Employee, String>
@Query(value="{ '_class' : 'com.igmtechnology.gravity.core.init.test.Manager' }")
List<Person> findAllManagers();
}
Detrás de escena, esto generará una consulta, similar a esta:
db.person.findAll({'_class' ; 'com.igmtechnology.gravity.core.init.test.Manager'});
Sin embargo, hay un problema menor con este código. Si cambia el nombre de clase completo de Manager
, entonces la consulta no generaría una RuntimeException
, pero no devolvería nada. En este caso, puede usar un comodín dentro de @Query
.
@Query(value="{ '_class' : ?0 }")
List<Person> findAllManagers(String className);
Luego, cuando invocas el método, puedes simplemente hacer:
managerRepository.findAllManagers(Manager.class.getName());
El Manager.class.getName()
proporcionado reemplazará el ?0
comodín y su consulta se construirá correctamente.
Lo mismo ocurre con el Employee
repositorio con la diferencia de que debe proporcionar el nombre de clase totalmente calificado de Employee
en el @Query
value
de atributo.
Más información: