2012-03-21 71 views

回答

19

是的。

lazy屬性告訴休眠何時得到孩子。

fetch屬性告訴hibernate 如何得到子。

當你說

懶惰= true屬性是讓父母和孩子 收藏和同樣的事情懶加載取=「選擇」屬性

是平掉不正確的。選擇獲取策略與關閉延遲加載不同。事實上,from the documentation

選擇取:第二SELECT用來檢索相關 實體或集合。除非您明確禁用指定lazy =「false」的延遲讀取 ,否則只有在您訪問關聯的 時纔會執行第二個選擇。

+0

Thanks.I有另一個疑問,當我讀取代理讀取或「無代理」獲取差異資源時,他們被稱爲單值關聯。什麼是hibernate中的單值關聯? – user1127214 2012-03-21 13:28:55

12

當我們說fetch="select"時,即使它是lazy ="false",它總是會觸發單獨的查詢來檢索關聯對象。

但是,當我們說lazy ="true"時,這意味着它將檢索單獨查詢中的關聯對象,但不是在加載對象時,而是在第一次訪問關聯時。我們可以說list().size()

當我們說fetch="join"時,它將始終觸發單個查詢以從數據庫獲取關聯對象。

0

爲了解決n個查詢(父子關係)在hibernate中的n + 1選擇問題,我們使用fetch =「join」而不是fetch =「select」。延遲設置決定是否在加載父對象時加載子對象。您需要執行此操作來設置父類的相應Hibernate映射文件.Lazy = true(表示不加載子對象)默認情況下,子對象的延遲加載爲true 。

相關問題