2012-06-12 22 views
5

Sử dụng đối tượng JPA EntityManager và đối tượng truy vấn JPA, làm thế nào tôi có thể ghi đè thứ gì đó có chú thích @OneToMany (fetch = FetchType.EAGER) để tìm nạp một cách lười biếng trong truy vấn?Cách ghi đè FetchType.EAGER thành lười khi chạy

Nếu tôi có đối tượng truy vấn ngủ đông, tôi có thể tạo đối tượng tiêu chí và sử dụng đối tượng này, đặt loại tìm nạp thành lười. Nhưng tôi phải sử dụng đối tượng truy vấn JPA. Có giải pháp nào cho vấn đề này?

+0

Có, bạn có thể - http://stackoverflow.com/questions/4388486/fetchmode-in-jpa-2-criteriaquery –

+0

Xem điều này: http: //stackoverflow.com/questions/17847289/ignore-a-fetchtype-eager-in-a-relationship. – Dherik

Trả lời

4

Không có cách nào để làm điều đó, ngay cả với API Hibernate gốc. Nếu một liên kết được định nghĩa là EAGER, nó sẽ luôn được tải háo hức, và không có cách nào để thay đổi điều đó bằng cách sử dụng một truy vấn.

Điều ngược lại không đúng: bạn có thể háo hức tải một liên kết lười biếng bằng truy vấn.

+0

Chết tiệt. Cảm ơn, vâng, tôi đã sử dụng fetch-keyword trong HQL để làm điều đó. – hugelgupf

-1

Nhìn vào hồ sơ Fetchnate Fetch hoặc JPA Entity Graphs. Vấn đề này đã được giải quyết kể từ khi bạn đã đặt câu hỏi vào năm 2012.

+0

Điều này chưa được giải quyết, xem: https://hibernate.atlassian.net/browse/HHH-8776 - không thể bỏ qua tải EAGER ngay cả khi sử dụng EntityGraphs. –

+0

Ahh lời xin lỗi của tôi, bỏ qua câu trả lời của tôi. Trường hợp sử dụng điển hình là ngược lại - đánh dấu các thực thể của bạn là được tìm nạp một cách lười biếng và sử dụng biểu đồ thực thể để thay đổi loại tìm nạp thành thời gian chạy. Tôi đã không nhận thức được HHH-8776, tốt để biết, cảm ơn. – mancini0

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