2013-07-30 77 views
0

在休眠或OpenJPA中,如果我做了FetchType = EAGER,我冒着加載不必要的數據的風​​險,並且會影響性​​能。 如果我做LAZY加載,我冒着N + 1的風險。 是否有任何指導什麼時候使用獲取模式?如何判斷EAGER和懶惰在Hibernate中的加載

回答

0

我同意@ D.R建議的一般準則:

裝載一方面意味着內存節省,從另一方面暗示增加的查詢數量的分貝渴望加載是相反

你必須選擇你的毒藥。

此外,我認爲值得一提的是可以用hibernate fetch profiles(如果您打算使用休眠)覆蓋獲取策略。當預定義的懶惰方法不夠靈活時,這是一個很好的解決方案。 使用提取配置文件,您可以讓hibernate以「不同的方式」爲該事務獲取對象。當你不得不懶惰地獲得物體時非常方便,但有時你需要一種不同的方法。

如果您採用二級緩存優化,則應該檢查兼容性,因爲當前提取配置文件實現支持JOIN策略。

0

一般來說,您應該在您立即需要數據的所有情況下使用提前取回。如果遇到N + 1問題,只需重新執行查詢並進行預先提取。

當然還有更多意見對於更具體的情況,但是,我猜,SO並不是討論事情的最佳地點。