2014-07-18 66 views
1

我正在尋找有關Hibernate.initialize(list)setFetchMode之間的差額部分的解釋...同樣,Hibernate.initialize(名單)VS調用setFetchMode

據我瞭解,他們有異曲同工之妙:加載延遲集合。

還有別的嗎?

,我能想象的另一件事是,從標準API去setFetchMode,你可以在你的收藏

回答

1

使用FetchMode可以讓你獲取在一個選擇的所有數據(通過加入根部添加一些標準實體到您也有興趣獲取的其他關聯)。

Hibernate.initialize(列表)將始終發出一個新的選擇。

加入一個一對多關聯是適當的,而多對一關聯沒有嚴格的提取限制。

如果您需要選擇多個一對多關聯,則需要額外的選擇。您可以使用:

我的建議是使用explicit fetching policies on a per-query basis,始終驗證actual executed SQL queries.

+0

另外值得一提的是,與同樣,Hibernate.initialize(列表)不保證列表中的元素將被初始化/實現。 – Shailendra

+0

如果不能保證元素將被初始化,那麼我們可以使用Hibernate.initialize(list)? – bryce

+1

根據[參考文檔](https://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/Hibernate.html#initialize%28java.lang.Object%29):「注意:這個只確保代理對象或集合的初始化;不保證集合中的元素將被初始化/實現。「因此集合被初始化,但來自該列表的元素也可能具有其他可能不會被此方法初始化的關聯。最好使用[嚴格的獲取策略](http://vladmihalcea.com/2013/10/17/hibernate-facts-the-importance-of-fetch-strategy/)。 –