在hibernate應用中,有時候只訪問指定的持久化物件,在載入該物件時沒有必要載入其關聯的物件,以免浪費記憶體空間,但若想在session關閉後正常訪問該物件,必須在載入該物件時,一起載入該物件的關聯物件,為了滿足檢索持久化物件的不同情況的需求,開發靈活高效的hibernate應用,hibernate提供的三種檢索策略:立即檢索、延遲檢索(載入)和迫切連線檢索。
在hibernate 3中為了提高效率、節省記憶體,預設的載入模式是延遲載入,也就是說沒有在orm配置檔案中顯示指定lazy引數的引數的話,laze的預設值是true,hibernate將預設為延遲載入,例如:有2個持久化物件:ttask和tusers
其中tusers是ttask的乙個多對一的關聯物件,ttask.hbm.xml中配置內容為:
測試程式段:
public void test(){
session session=hibernatesessionfactory.getsession();
query q=session.createquery("from ttask");
list list=q.list(); (1)
hibernatesessionfactory.closesession();
for(int i=0;i標籤,可以取值true/false
標籤,可以取值true/false
標籤,可以取值true/false/extra
單端關聯,可以取值:false/proxy/noproxy
load支援lazy,get不支援,無論持久化類設定與否,都會立即檢索。
(1)class標籤
預設為true
class上的lazy,只對普通屬性起作用,對集合和不起作用
即:如果乙個類裡有set集合成員變數和需要用來對映的成員變數,即使在class裡設定lazy為false,他們在使用之前也不會載入。需要單獨設定lazy,也就是lazy的另外兩個用法。
如果在使用load載入了某個物件,但是沒有使用,即沒有發出sql語句,就把session給關了,此時,如果再使用這個物件就會丟擲lazyinitalizationexception。因為物件並沒有載入上來,因為使用了lazy策略,只是載入了類的乙個**子類。
(2)集合
預設為true
預設為true情況下,只要使用到了set物件,就會把整個set全部查詢出來。
false情況下,不使用lazy,查詢lazy所屬的物件時,set就會被查詢上來。需要類增強工具。
extra情況下,比較智慧型,根據查詢的內容,生成不同的sql語句。效率會高一些。
(3)單端關聯
預設為proxy
false:不使用lazy。
noproxy:需要類增強工具
(4)property
預設false
true:較少使用,如果某個欄位是內容量比較大,可以設定為true,在真正使用的時候再載入。可以提高效率。
Hibernate 延遲載入和立即載入
概念 什麼是延遲載入 所謂延遲載入就是當在真正需要資料的時候,才真正執行資料載入操作。可以簡單理解為,只有在使用的時候,才會發出sql語句進行查詢,資料是分n次讀取。一 延遲載入 nhibernate延遲載入須有session存在,且配置為lazy true 預設 dal中編寫方法如下 延遲載入 p...
Hibernate 延遲載入和立即載入
概念 什麼是延遲載入 所謂延遲載入就是當在真正需要資料的時候,才真正執行資料載入操作。可以簡單理解為,只有在使用的時候,才會發出sql語句進行查詢,資料是分n次讀取。一 延遲載入 nhibernate延遲載入須有session存在,且配置為lazy true 預設 dal中編寫方法如下 延遲載入 p...
Hibernate 延遲載入和立即載入
延遲載入 延遲載入 lazy load懶載入 是當在真正需要資料時,才執行sql語句進行查詢,避免了無謂的效能開銷。延遲載入分類 01.類級別的查詢策略 02.一對多和多對多關聯的查詢策略 03.多對一關聯的查詢策略 如果程式載入乙個物件的目的是為了訪問它的屬性,可採取立即檢索,如果程式載入乙個持久...