Hibernate(四)--延遲加載(lazyload)


hibernate中的延遲加載(lazyload)分屬性的延遲加載關系的延遲加載

屬性的延遲加載:
    當使用load的方式來獲取對象的時候,只有訪問了這個對象的屬性,hibernate才會到數據庫中進行查詢。否則不會訪問數據庫

 

 

 

Load的加載方式:
1、Load采用延遲加載的方式,hibernate的思想是既然這個方法支持延遲加載,它就認為這個對象一定在數據庫中存在,可以放心的使用代理來延遲加載,如果在使用過程中出現了問題就放心的拋異常
2、Load方法會首先查詢session緩存,看緩存中有沒有這個對象
3、如果緩存中沒有這個對象就會去創建個代理對象來管理,因為延遲加載需要代理來執行。但是並沒有去數據庫中查詢
4、只有當你實際使用這個對象的時候,它才會觸發sql語句。這個時候hibernate就會去查詢二級緩存和數據庫,如果數據庫中沒有這條語句,就拋出異常ObjectNotFoundException。

hibernate load方法加載實體對象的時候,會根據映射文件上 類級別 lazy屬性值的配置,分情況討論:
(1)若為true,即為延遲加載,就是上面的模式
(2)若為false,即為非延遲加載,即立即加載。就跟get方法查找順序一樣,只是最終若沒發現符合條件的記錄,則會拋出一個ObjectNotFoundException。

 

 

 

關系的延遲加載:

    one-many many-many的時候都可以使用關系的延遲加載

 

 

 元素中的lazy屬性的可選值為:true(延遲加載),extra(增強延遲加載)和false(立即加載);
 元素中的lazy屬性的默認值為true
     extra其實是一種比較智能的延遲加載,即調用集合的size/contains等方法的時候,hibernate並不會去加載整個集合的數據,而是發出一條聰明的SQL語句,以便獲得需要的值,只有在真正需要用到這些集合元素對象數據的時候,才去發出查詢語句加載所有對象的數據。

 


 

 

hibernate在對象關系映射文件中配置加載策略的方式:(lazy)
1、類級別
元素中lazy屬性的可選值為true(延遲加載)和false(立即加載);
元素中的lazy屬性的默認值為true

2、一對多關聯級別:
元素中的lazy屬性的可選值為:true(延遲加載),extra(增強延遲加載)和false(立即加載);
元素中的lazy屬性的默認值為true
     extra其實是一種比較智能的延遲加載,即調用集合的size/contains等方法的時候,hibernate並不會去加載整個集合的數據,而是發出一條聰明的SQL語句,以便獲得需要的值,只有在真正需要用到這些集合元素對象數據的時候,才去發出查詢語句加載所有對象的數據。

 

 


3、多對一關聯級別:
元素中lazy屬性的可選值為:proxy(延遲加載),no-proxy(無代理延遲加載)和false(立即加載)
元素中的lazy屬性的默認值為proxy


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM