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