看完這篇文章enter link description here是否LAZY獲取類型產生N +1選擇
後,我得到了一個提取模式= LAZY總是會導致N + 1問題的想法。這是真的?如果是這樣,爲什麼?即使獲取類型是LAZY,OpenJPA/Hibernate也應該能夠優化查詢。沒有?
看完這篇文章enter link description here是否LAZY獲取類型產生N +1選擇
後,我得到了一個提取模式= LAZY總是會導致N + 1問題的想法。這是真的?如果是這樣,爲什麼?即使獲取類型是LAZY,OpenJPA/Hibernate也應該能夠優化查詢。沒有?
您可以在查詢中指定提前獲取來避免它。這會產生一個JOIN sql。
Criteria c = session.createCriteria(Entity1.class);
c.setFetchMode("anotherObj", FetchMode.JOIN)
return c.list();
是的,它會的。但額外的SELECT只有在訪問關係中定義的對象時纔會執行(這就是爲什麼它被稱爲LAZY加載)。
這是解釋它更詳細的優秀文章:http://www.mkyong.com/hibernate/hibernate-fetching-strategies-examples/
乾杯
我的問題不在於如何避免N +!通過一個渴望的獲取,但是... LAZY獲取自動意味着一個N + 1選擇? – Victor