För båda arkiven kan du använda @Query
anteckning för att specificera en MongoDB JSON-frågesträng som kommer att användas istället för en fråga som härrör från metodens namn (du måste veta att det finns en konvention för att analysera förvarets metodnamn och för att bygga MongoDB-frågor).
Så genom att använda @Query
, kan du göra:
@Repository
public interface ManagerRepository extends MongoRepository<Employee, String>
@Query(value="{ '_class' : 'com.igmtechnology.gravity.core.init.test.Manager' }")
List<Person> findAllManagers();
}
Bakom kulisserna kommer detta att generera en fråga, liknande den här:
db.person.findAll({'_class' ; 'com.igmtechnology.gravity.core.init.test.Manager'});
Det finns dock ett mindre problem med den här koden. Om du ändrar det fullt kvalificerade klassnamnet för Manager
, då skulle frågan inte skicka en RuntimeException
, men skulle inte returnera något. I det här fallet kan du använda ett jokertecken i @Query
.
@Query(value="{ '_class' : ?0 }")
List<Person> findAllManagers(String className);
Sedan, när du anropar metoden, kan du bara göra:
managerRepository.findAllManagers(Manager.class.getName());
Den tillhandahållna Manager.class.getName()
kommer att ersätta ?0
jokertecken och din fråga kommer att skapas korrekt.
Detsamma gäller för Employee
repository med skillnaden att du måste tillhandahålla det fullt kvalificerade klassnamnet för Employee
i @Query
s value
attribut.
Mer information: