Vấn đề của tôi rất đơn giản nhưng tôi không biết cách làm cho Hibernate làm theo cách mình muốn: - bảng MainTable có nhiều-2-một với ParentTable (với 100 hàng). điểm MainTable để m = 26 hàng trong tổng số 100 hàng trong ParentTableHibernate tạo ra m + 1 truy vấn trong nhiều-một-
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "PARENT_ID")
@Fetch(FetchMode.JOIN)
Khi tôi chỉ đơn giản là truy vấn "từ MainTable"
nó sẽ tạo ra 26 + 1 truy vấn
Khi tôi theo dõi các truy vấn, Truy vấn thứ nhất chỉ tải PARENT_ID được sử dụng bởi 26 truy vấn sau này. Tôi đoán nó phải có cách để tải toàn bộ PARENT_TABLE trong truy vấn 1st ..
hãy giúp đỡ bằng cách giả định rằng:
- FetchType.EAGER là một PHẢI
- Sử dụng từ MainTable mt trái tham gia lấy mt.parent mẹ là ok nhưng chúng tôi có nhiều hiệp hội
Tránh N + 1 chọn sự cố: http://www.realsolve.co.uk/site/tech/hib-tip-pitfall.php?name=n1selects http://stackoverflow.com/questions/97197/what -is-the-n1-selects-problem –
@Pangea: Cảm ơn nhưng ở đây một số nhận xét: 1) Sử dụng tìm nạp là tốt, nhưng chúng tôi có khoảng mười bảng Phụ huynh. Đó sẽ là giải pháp cuối cùng 2) Chúng tôi muốn một cái gì đó tương tự như Subselect lấy trong One-2-Many, để 1 truy vấn cho MainTable, 1 thêm cho bảng có liên quan –
@Fetch (FetchMode.JOIN) và @Fetch (FetchMode.SELECT) không có sự khác biệt nào cả !!! o_0 –