![](/img/trans.png)
[英]Which Hibernate FetchMode will cause collections to be lazy-loaded?
[英]How hibernate decide which of FetchMode use by default?
在我們的項目中,我們使用 Hibernate,並且在日志中我們觀察到,當我們沒有指定 FetchMode 時,它有時使用 Join 有時使用 Select 關系(據我所知是 FetchMode)。
如果沒有指定,Hibernate 如何決定使用哪一個 FetchMode?
有沒有這方面的規范? 有幾行代碼? 有文章嗎?
在未指定FetchMode
且 FetchType 為EAGER
時查看生成的 SQL,在 Hibernate 中默認為JOIN
。
遺憾的是,我在官方文檔中找不到此信息。
關於SELECT
的使用,即使JOIN
是默認值,我認為有些查詢無法在單個查詢中解決, 如下所示:
但是如果你允許 B 而沒有 C,Hibernate 只需要在它加載 B 的那一刻檢查 C 的存在。但是一個 SELECT 來檢查存在是低效的,因為同一個 SELECT 可能不僅檢查存在,而且加載整個對象。 所以懶加載消失了。
如果一個字段沒有用@Fetch
注釋,那么這個字段的默認FetchMode
取決於FetchType
和查詢是如何完成的:
FetchType.LAZY
=> FetchMode.SELECT
FetchType.EAGER
:
Session.get
) => FetchMode.JOIN
FetchMode.SELECT
FetchMode.SELECT
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.