Đối với cả hai kho, bạn có thể sử dụng @Query
chú thích để chỉ định một chuỗi truy vấn MongoDB JSON sẽ được sử dụng thay vì truy vấn bắt nguồn từ tên của phương thức (bạn phải biết rằng có một quy ước để phân tích cú pháp các tên phương thức của kho lưu trữ và để xây dựng các truy vấn MongoDB).
Vì vậy, bằng cách sử dụng @Query
, bạn có thể làm:
@Repository
public interface ManagerRepository extends MongoRepository<Employee, String>
@Query(value="{ '_class' : 'com.igmtechnology.gravity.core.init.test.Manager' }")
List<Person> findAllManagers();
}
Phía sau, điều này sẽ tạo ra một truy vấn, tương tự như sau:
db.person.findAll({'_class' ; 'com.igmtechnology.gravity.core.init.test.Manager'});
Tuy nhiên, có một vấn đề nhỏ với mã này. Nếu bạn thay đổi tên lớp đủ điều kiện của Manager
, thì truy vấn sẽ không ném ra một RuntimeException
, nhưng sẽ không trả lại gì. Trong trường hợp này, bạn có thể sử dụng ký tự đại diện trong @Query
.
@Query(value="{ '_class' : ?0 }")
List<Person> findAllManagers(String className);
Sau đó, khi bạn gọi phương thức, bạn chỉ có thể thực hiện:
managerRepository.findAllManagers(Manager.class.getName());
Manager.class.getName()
được cung cấp sẽ thay thế ?0
ký tự đại diện và truy vấn của bạn sẽ được tạo đúng cách.
Tương tự đối với Employee
kho lưu trữ với sự khác biệt mà bạn phải cung cấp tên lớp đủ điều kiện của Employee
trong @Query
giá trị value
thuộc tính.
Thông tin thêm: