Pro oba repozitáře můžete použít @Query
anotace k zadání řetězce dotazu MongoDB JSON, který bude použit místo dotazu odvozeného z názvu metody (musíte vědět, že existuje konvence pro analýzu názvů metod úložiště a pro vytváření dotazů MongoDB).
Takže pomocí @Query
, můžete:
@Repository
public interface ManagerRepository extends MongoRepository<Employee, String>
@Query(value="{ '_class' : 'com.igmtechnology.gravity.core.init.test.Manager' }")
List<Person> findAllManagers();
}
V zákulisí to vygeneruje dotaz podobný tomuto:
db.person.findAll({'_class' ; 'com.igmtechnology.gravity.core.init.test.Manager'});
S tímto kódem je však menší problém. Pokud změníte plně kvalifikovaný název třídy Manager
, pak dotaz nevyvolá RuntimeException
, ale nic by nevrátil. V tomto případě můžete použít zástupný znak v rámci @Query
.
@Query(value="{ '_class' : ?0 }")
List<Person> findAllManagers(String className);
Poté, když metodu vyvoláte, můžete jednoduše:
managerRepository.findAllManagers(Manager.class.getName());
Poskytnuté Manager.class.getName()
nahradí ?0
zástupný znak a váš dotaz bude vytvořen správně.
Totéž platí pro Employee
úložiště s tím rozdílem, že musíte zadat plně kvalifikovaný název třídy Employee
v @Query
value
atribut.
Více informací: