Untuk kedua repositori, Anda dapat menggunakan @Query
anotasi untuk menentukan string kueri JSON MongoDB yang akan digunakan sebagai ganti kueri yang diturunkan dari nama metode (Anda harus tahu bahwa ada konvensi untuk menguraikan nama metode repositori dan untuk membuat kueri MongoDB).
Jadi, dengan menggunakan @Query
, Anda dapat melakukan:
@Repository
public interface ManagerRepository extends MongoRepository<Employee, String>
@Query(value="{ '_class' : 'com.igmtechnology.gravity.core.init.test.Manager' }")
List<Person> findAllManagers();
}
Di balik layar, ini akan menghasilkan kueri, mirip dengan yang ini:
db.person.findAll({'_class' ; 'com.igmtechnology.gravity.core.init.test.Manager'});
Namun, ada masalah kecil dengan kode ini. Jika Anda mengubah nama kelas yang sepenuhnya memenuhi syarat dari Manager
, maka kueri tidak akan menampilkan RuntimeException
, tetapi tidak akan mengembalikan apa pun. Dalam hal ini Anda dapat menggunakan wildcard dalam @Query
.
@Query(value="{ '_class' : ?0 }")
List<Person> findAllManagers(String className);
Kemudian, ketika Anda memanggil metode tersebut, Anda cukup melakukan:
managerRepository.findAllManagers(Manager.class.getName());
Manager.class.getName()
yang disediakan akan menggantikan ?0
wildcard dan kueri Anda akan dibuat dengan benar.
Hal yang sama berlaku untuk Employee
repositori dengan perbedaan bahwa Anda harus memberikan nama kelas yang sepenuhnya memenuhi syarat dari Employee
di @Query
value
atribut.
Info lebih lanjut: