2010-02-08 57 views
18

我正在寫一個針對域模型的查詢,其中(無論出於何種原因)一對多關聯映射爲lazy =「false」。在我特別的問題中,我寧願懶懶地取出那個集合,因爲我不關心它的內容。我怎樣才能讓我的特殊查詢重新獲得懶惰?這可能嗎?Hibernate:在Criteria API中啓用延遲獲取

到目前爲止,我看着Criteria.setFetchMode,但FetchMode.LAZY僅僅是FetchMode.SELECT棄用的名稱...

改變映射很可能是理想的,但我寧願不要冒險影響現有的查詢。

編輯:我們使用Hibernate的3.3.2

回答

-6

我不是專家,我自己,而是通過Hibernate書瀏覽,並與一位同事協商並沒有給我任何暗示,這將是可能的,而不是相反。

你似乎是一種不尋常的情況,而不是Hibernate所涵蓋的。典型的用例是相反的:在默認情況下使用延遲獲取,並選擇性地啓用對於查詢合理的查詢。

+0

我也沒有發現任何東西。看來最好不要偏離hibernate的默認值。我已經通過預測來解決這個問題。 (我不需要整個實體,儘管我寧願避免定義一個新的DTO)。 – meriton 2010-02-09 15:12:46

+3

看到我的答案,setFetchMode工作。 – 2012-06-01 03:51:28

4

萬一有人偶然發現這個(像我一樣),請參考this。看起來這是一個Hibernate文檔錯誤,並且FetchMode.SELECT確實會導致延遲加載

25

接受的答案是錯誤的。 Hibernate允許你在標準中進行懶讀取,這是默認情況下在映射中急切需要的。只需撥打電話

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

我試過這個,它工作。 FetchMode.LAZY被標註爲廢棄的源代碼,它是所有指向FetchMode.SELECT

Hibernate代碼:

public static final FetchMode LAZY = SELECT; 
+1

這對我有用 - 我使用Criteria.DISTINCT_ROOT_ENTITY與setFirstResult&setMaxResults並得到太少的結果。 – blank 2012-06-22 06:09:38

+2

@Che javara - 只是嘗試過這一點,而不是爲我工作。我使用Hibernate 3.6.10。搜索使用代碼,沒有一個看起來是Hibernate跳過加載集合/關聯的情況。有什麼建議在哪裏看? – mikemil 2013-11-07 20:11:43

+0

hibernate 4.0.5不適合我 – nxhoaf 2016-07-04 05:10:11