Tôi đang cố gắng sử dụng Hibernate để truy xuất khoảng 100 triệu hàng từ một bảng. Tôi có một mục thực thể tồn tại lâu dài chứa một tập hợp các khoản phí bên trong (một thực thể khác tồn tại). Vì tôi sẽ lặp lại kết quả và truy cập phí cho mọi đối tượng, tôi muốn háo hức tìm nạp phí để tránh vấn đề n + 1.Tìm nạp bộ sưu tập trong Hibernate với ScrollableResults
Tôi cũng nên đề cập rằng tôi muốn tham gia nó với một bảng khác được gọi là nhà cung cấp (ánh xạ một-một nhưng không có khóa ngoại). Tôi đã thử:
String query = "select new " + Order.class.getName()
+ "(i, p) from Item i left join fetch i.fees f, Provider p where "
+ "p.factoryId=i.factoryId and p.factoryRef=i.factoryRef";
return session.createQuery(query).scroll();
Lớp đặt hàng của tôi chứa trường Nhà cung cấp và trường Mục. Tôi nhận được lỗi này:
Caused by: org.hibernate.QueryException: query specified join fetching, but the owner of the fetched association was not present in the select list
Tôi muốn kết thúc bằng danh sách có thể cuộn của Đơn đặt hàng chứa Item (với phí được tìm nạp háo hức) và Nhà cung cấp.
Tôi nghĩ câu trả lời này là đúng. Nếu vậy, bạn sẽ có thể cho Hibernate biết rằng bạn đang thực sự tìm nạp 'Item' bằng cách thay đổi truy vấn để trả về 'List' thay vì xây dựng một' Order': 'select i, p from ...'. Sau đó, bạn sẽ phải tạo ra 'Order's bằng tay. –