簡體   English   中英

當我們在hibernate中進行fetch =“join”和lazy =“true”時會發生什么

[英]What happens when we make fetch=“join” and lazy=“true” in hibernate

如果我們將獲取策略用作“join”,則會觸發單個連接查詢(通過一個連接查詢組合父級和子級),並且默認行為等同於lazy =“false”。 這意味着將立即為父項提取所有子記錄。 但是,如果我們標記lazy =“true”,那么行為會是什么? 由於連接查詢是單一的,可以懶得取出什么?

FetchMode Join會覆蓋惰性屬性。 它很容易被忽略。 如果您對Fetchmodes的詳細解釋感興趣,請看這里 本文描述了Hibernate fetchmodes及其產生的輸出。

通過對集合或單值關聯映射使用fetch =“join”,您實際上將避免使用第二個SELECT(因此使關聯或集合非惰性),只使用一個“更大”的外部(對於可以為空的多個 - 一個外鍵和集合)或內部(對於非空多對一外鍵)連接SELECT以獲取擁有實體和引用的實體或集合。 如果對特定實體實例使用fetch =“join”作為多個集合角色(在“並行”中),則創建一個笛卡爾積(也稱為交叉連接),兩個(惰性或非惰性)SELECT可能是快點。

使用lazy =“true”on和mappings來啟用單個標量值類型屬性的延遲加載(有點奇特的情況)。 需要使用編譯的持久化類的字節碼檢測來注入攔截代碼。 可以使用FETCH ALL PROPERTIES在HQL中覆蓋。

來自https://community.jboss.org/wiki/AShortPrimerOnFetchingStrategies 希望它有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM