2015-01-20 14 views
5

Chúng tôi đang sử dụng kho dữ liệu mùa xuân để lưu trữ/truy xuất tài liệu. Sau đây là cấu trúc Java của các lớp chúng ta có: Lớp trừu tượng A -> Lớp Bê tông B và C Chúng tôi đang viết các tài liệu bằng phương thức save(). khi một tài liệu được lưu, biến "_class" được lưu để lưu lớp classPath. Bây giờ, khi chúng tôi thử và truy vấn dữ liệu, chúng tôi đang nhận được các tài liệu của cả hai lớp B và C. Sau đây là ví dụ:Dữ liệu mùa xuân tìm thấy theo giá trị "_class"

public List<B> findByName (String name); 

Khi chúng tôi gọi phương thức này, danh sách (đáng ngạc nhiên) cũng chứa các đối tượng của C. Có thể là do B và C có một thuộc tính có cùng tên. Câu hỏi của tôi là, nếu chúng ta muốn giới hạn kết quả đến một lớp cụ thể, có thể sử dụng kho lưu trữ Mongo không? Chúng tôi đã thử với findBy_Class, findByClass nhưng nó đã ném một ngoại lệ nói rằng nó không thể tìm thấy thành viên "class" trong "B".

Không phải loại trả về (ví dụ: Danh sách < B>) giúp lọc các đối tượng? Bất kỳ ý tưởng?

Xin cảm ơn trước.

Trả lời

0

Trên đối tượng truy vấn có phương thức "hạn chế" chỉ trả về các đối tượng thuộc một loại nhất định. http://docs.spring.io/spring-data/mongodb/docs/current/api/index.html?org/springframework/data/mongodb/core/MongoOperations.html Tôi cho rằng bạn có thể làm một cái gì đó như thế:

query.restrict(B.class).findByName(...) 
+1

Cảm ơn cho câu trả lời. Tôi đang sử dụng MongoRepository và không phải là đối tượng hoạt động Mongo. Vì vậy, tôi sẽ chỉ định nghĩa các phương thức trong giao diện và các phương thức đó sẽ được chuyển thành các truy vấn như được giải thích trong url này: http://docs.spring.io/spring-data/data-document/docs/current/reference/html/ # repositories.query-methods.query-lookup-strategy. Không biết liệu có cách nào để chỉ định lớp ở đây không. –

Các vấn đề liên quan