2010-02-08 37 views
18

Tôi đang viết truy vấn đối với mô hình miền nơi (vì bất kỳ lý do gì) liên kết một-nhiều được ánh xạ với lazy = "false". Trong truy vấn cụ thể của tôi, tôi thà lấy bộ sưu tập đó một cách uể oải, bởi vì tôi không quan tâm đến nội dung của nó. Làm cách nào để tôi có thể bật lại sự lười biếng cho truy vấn cụ thể của mình? cái này nó có hoàn toàn có thể xảy ra được không?Hibernate: Bật tìm nạp lười trong API tiêu chí

Cho đến nay, tôi nhìn vào Criteria.setFetchMode, nhưng FetchMode.LAZY chỉ đơn thuần là một bí danh phản đối cho FetchMode.SELECT ...

Thay đổi các bản đồ có lẽ sẽ là lý tưởng, nhưng tôi thà không có nguy cơ ảnh hưởng đến các truy vấn hiện có.

Chỉnh sửa: Chúng tôi sử dụng Hibernate 3.3.2

Trả lời

-6

Tôi không phải là một chuyên gia bản thân mình, nhưng xem qua cuốn sách Hibernate và trao đổi với một đồng nghiệp đã không cho tôi bất kỳ gợi ý rằng điều này sẽ có thể, chứ không phải ngược lại .

Của bạn có vẻ là một tình huống bất thường, không được bao phủ bởi Hibernate. Trường hợp sử dụng điển hình là ngược lại: sử dụng tìm nạp lười theo mặc định và chọn lọc tìm nạp mong muốn cho các truy vấn mà nó được hợp lý hóa.

+0

tôi không tìm thấy bất cứ điều gì cả. Nó xuất hiện một tốt hơn không đi chệch khỏi mặc định của ngủ đông. Tôi đã làm việc xung quanh vấn đề bằng cách chiếu. (Tôi không cần toàn bộ thực thể, mặc dù tôi muốn tránh việc định nghĩa một DTO mới). – meriton

+3

xem câu trả lời của tôi, setFetchMode đã hoạt động. –

4

Trong trường hợp ai đó tình cờ gặp điều này (như tôi), hãy tham khảo this. Có vẻ như đây là lỗi tài liệu về Hibernate và FetchMode.SELECT không gây ra tải chậm.

25

Câu trả lời được chấp nhận là sai. Hibernate cho phép bạn lười biếng tìm nạp trong tiêu chí một cái gì đó mà là mặc định háo hức trong việc lập bản đồ. Chỉ cần gọi

criteria.setFetchMode("propertyName", FetchMode.SELECT); 

Tôi đã thử cách này và hoạt động. FetchMode.LAZY được đánh dấu phản đối trong mã nguồn, và tất cả nó làm là trỏ đến FetchMode.SELECT

đang

Hibernate:

public static final FetchMode LAZY = SELECT; 
+1

Điều này phù hợp với tôi - Tôi đã sử dụng Criteria.DISTINCT_ROOT_ENTITY với setFirstResult & setMaxResults và nhận được quá ít kết quả. – blank

+2

@Cô javara - chỉ cần thử điều này và không làm việc cho tôi. Tôi đang sử dụng Hibernate 3.6.10. Tìm kiếm mã để sử dụng và không ai xem là trường hợp Hibernate bỏ qua việc tải một tập hợp/liên kết. Có bất kỳ đề xuất về nơi để tìm? – mikemil

+0

Đã không làm việc cho tôi với hibernate 4.0.5 – nxhoaf

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