2012-05-14 46 views
6

Tôi có một cấu trúc như thế này:Hibernate Query Language (HQL) - Truy vấn cho lười biếng/no-lười biếng tải

  • A chứa bộ sưu tập của B (ánh xạ như không-lười biếng)
  • B chứa bộ sưu tập của C (ánh xạ là không lười)

Tôi muốn tạo một truy vấn, truy xuất đối tượng A, chứa đối tượng B không có đối tượng C bên trong chúng. Điều đó có thể không? Cách khác xung quanh sẽ làm việc cho tôi quá (nếu mối quan hệ B-C được ánh xạ lười biếng và truy vấn truy xuất A, chứa B và C).

Cảm ơn!

+0

Bản sao có thể có của [Hibernate: EAGER của bản đồ ghi đè trong HQL?] (Http://stackoverflow.com/questions/3072568/hibernate-overriding-mappings-eager-in-hql) – davidwebster48

Trả lời

5

Không, không thể. Vì bạn đã đánh dấu bản thân liên kết là háo hức được tải, Hibernate sẽ luôn tải liên kết này một cách háo hức.

Nếu bạn đánh dấu các hiệp hội như lười biếng (mặc định cho các hiệp hội toMany), sau đó bạn có tùy chọn thứ của háo hức lấy chúng trong một truy vấn, sử dụng một join fetch:

select a from A a left join fetch a.bs b left join fetch b.cs 

Lưu ý rằng điều này sẽ không hoạt động nếu cả hai bộ sưu tập là túi (ví dụ: Danh sách không có cột chỉ mục).

+0

Xin chào, cảm ơn câu trả lời. Tôi cũng tìm thấy chủ đề này, câu trả lời là như nhau: http://stackoverflow.com/questions/3516873/hql-fetch-join-collections-from-eager-table Nhưng tôi đang gặp một số vấn đề khiến nó hoạt động tốt nó nhân "A" nhiều lần. Rất có thể là lỗi của tôi. – Mooncrosser

+0

Giải quyết nó, "khác biệt" là cần thiết để làm cho nó hoạt động đúng (tôi không phải là một chuyên gia và tôi không có ý tưởng gì khác biệt). Tôi sẽ đánh dấu đây là câu trả lời chính xác, nhưng sẽ tốt nếu bạn chỉnh sửa hoặc cho tôi biết sự khác biệt ở đâu :) – Mooncrosser

+1

Không có sự khác biệt, Hibernate trả về 1 kết quả cho mỗi hàng của kết quả JDBC. Điều này có nghĩa rằng nếu bạn chỉ có một A với 2 Bs, và mỗi B có 2 C, truy vấn sẽ trả về 4 hàng, và danh sách sẽ chứa 4 lần cùng một ví dụ A. Từ khóa riêng biệt làm cho Hibernate xóa các bản sao khỏi danh sách . –

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