hibernate中load和get方法的區別

johon 13年前發布 | 5K 次閱讀 Google Material

1.讀取時機不同(當lazy=true的時候)
    load是采用延遲機制(load語句不讀庫,等使用非主鍵時才去讀庫),而get不采用延
  遲機制(get語句時馬上讀庫);

2.搜索不到數據時的情況
    當搜索的數據不存在的時候,load依然會返回一個對象,在你使用該對象的非主鍵數
  據時,會拋出異常;
    當搜索的數據不存在的時候,get會返回一個null;
  其實看似load到用的時候才去讀數據庫,比get要節省資源,但還沒深入研究過。

3.get不支持lazy   load支持lazy

4.采用get加載數據時,如果無匹配數據則返回null load則報異常
------------------------------------------------------------
hibernate lazy策略可以使用在:
* <class>標簽上,取true,false值
* <property>標簽上,取true,false需要增強類
* <set><list>上,取false,true,extra
* <one-to-one>、<many-to-one>單端關聯上,可以取值false/proxy/noproxy

lazy概念:

只有真正使用該對象時,才會創建,對hibernate而言,真正使用的時候才會發出,
hibernate支持lazy策略只有在session打開狀態下才有效如果把用延遲加載的話數據傳遞給動態
頁面那么使用OpenSessionInView模式,直到我們把session中的所有屬性用完了,才關閉session。

A.<class>標簽上的lazy特性只對普通屬性起作用hibernate在集合上的lazy策略,取值false,

true,extra

B.<class>標簽上的lazy不會影響到集合上面的lazy特性,lazy默認為true;


C.集合標簽上面的lazy特性推薦使用 extra 因為比較智能


D.在<class>上lazy為true時,load時不發出sql語句,只有在使用是才發出。為false時load時就

馬上發出sql語句。

E.在<class>上lazy為true時,load時不發出sql語句,只有使用時才發出。為false時在第一次

load時就執行全部sql語句。為extra時,和true差不多,不過發出的sql語句比較智能。

F.hibernate 在<one-to-one><many-to-one>單端關聯上,可以取值false/proxy/noproxy 默認proxy


G.<class>標簽上的lazy不會影響到單端上面的lazy特性。

------------------------------------------------------------
Hibernate.initialize(Object proxy) 方法強制加載這樣就相當于在程序中動態改變為lazy=false

 本文由用戶 johon 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!