在我們的項目中,我們使用Hibernate,在日誌中,我們觀察到它有時使用Join,有時候選擇關係(因爲我知道它是FetchMode),當我們沒有指定FetchMode時。Hibernate如何決定默認使用哪個FetchMode?
如果沒有指定,Hibernate如何決定FetchMode中的哪一個使用?
有沒有這方面的規範?任何代碼行?任何物品?
在我們的項目中,我們使用Hibernate,在日誌中,我們觀察到它有時使用Join,有時候選擇關係(因爲我知道它是FetchMode),當我們沒有指定FetchMode時。Hibernate如何決定默認使用哪個FetchMode?
如果沒有指定,Hibernate如何決定FetchMode中的哪一個使用?
有沒有這方面的規範?任何代碼行?任何物品?
當沒有指定FetchMode
並且FetchType爲EAGER
時,查看生成的SQL,Hibernate中默認爲JOIN
。
很遺憾,我在官方文檔中找不到這些信息。
關於使用SELECT
即使JOIN
是默認的,我認爲這是某些查詢不能在一個單一的查詢來解決,like this:
但是,如果你允許B,不含C,休眠只是在它載入B時檢查存在的 C.但是,檢查存在的SELECT只是 效率低下,因爲相同的SELECT可能不僅檢查存在,而且 加載整個對象。所以懶加載消失。
http://www.solidsyntax.be/2013/10/17/fetching-collections-hibernate/ – Steephen
有「什麼時候」(懶惰,渴望),有「如何」(選擇,加入等)關於FetchMode。看起來你對「如何」感興趣。嘗試閱讀官方的[文檔](https://docs.jboss.org/hibernate/orm/4.2/manual/en-US/html/ch20.html),這裏有一些關於默認模式的細節 – aUserHimself