1.讀取時(shí)機(jī)不同(當(dāng)lazy=true的時(shí)候)
load是采用延遲機(jī)制(load語(yǔ)句不讀庫(kù),等使用非主鍵時(shí)才去讀庫(kù)),而get不采用延遲機(jī)制(get語(yǔ)句時(shí)馬上讀庫(kù));
2.搜索不到數(shù)據(jù)時(shí)的情況
當(dāng)搜索的數(shù)據(jù)不存在的時(shí)候,load依然會(huì)返回一個(gè)對(duì)象,在你使用該對(duì)象的非主鍵數(shù)據(jù)時(shí),會(huì)拋出異常;
當(dāng)搜索的數(shù)據(jù)不存在的時(shí)候,get會(huì)返回一個(gè)null;
其實(shí)看似load到用的時(shí)候才去讀數(shù)據(jù)庫(kù),比get要節(jié)省資源,但還沒(méi)深入研究過(guò)。
1 get不支持lazy load支持lazy
2 采用get加載數(shù)據(jù)時(shí),如果無(wú)匹配數(shù)據(jù)則返回null load則報(bào)異常
------------------------------------------------------------
hibernate lazy策略可以使用在:
* <class>標(biāo)簽上,取true,false值
* <property>標(biāo)簽上,取true,false需要增強(qiáng)類
* <set><list>上,取false,true,extra
* <one-to-one>、<many-to-one>單端關(guān)聯(lián)上,可以取值false/proxy/noproxy
lazy概念:只有真正使用該對(duì)象時(shí),才會(huì)創(chuàng)建,對(duì)hibernate而言,真正使用的時(shí)候才會(huì)發(fā)出,
hibernate支持lazy策略只有在session打開(kāi)狀態(tài)下才有效
如果把用延遲加載的話數(shù)據(jù)傳遞給動(dòng)態(tài)頁(yè)面那么使用OpenSessionInView模式,直到我們把session中的所有屬性用完了,才關(guān)閉session
<class>標(biāo)簽上的lazy特性只對(duì)普通屬性起作用
hibernate在集合上的lazy策略,取值false,true,extra
<class>標(biāo)簽上的lazy不會(huì)影響到集合上面的lazy特性,lazy默認(rèn)為true;
集合標(biāo)簽上面的lazy特性推薦使用 extra 因?yàn)楸容^智能
在<class>上lazy為true時(shí),load時(shí)不發(fā)出sql語(yǔ)句,只有在使用是才發(fā)出。
為false時(shí)load時(shí)就馬上發(fā)出sql語(yǔ)句。
在<class>上lazy為true時(shí),load時(shí)不發(fā)出sql語(yǔ)句,只有使用時(shí)才發(fā)出。
為false時(shí)在第一次load時(shí)就執(zhí)行全部sql語(yǔ)句。為extra時(shí),和true差不多,不過(guò)發(fā)出的sql語(yǔ)句比較智能。
hibernate 在<one-to-one><many-to-one>單端關(guān)聯(lián)上,可以取值false/proxy/noproxy 默認(rèn)proxy
<class>標(biāo)簽上的lazy不會(huì)影響到單端上面的lazy特性。
------------------------------------------------------------
Hibernate.initialize(Object proxy) 方法強(qiáng)制加載這樣就相當(dāng)于在程序中動(dòng)態(tài)改變?yōu)閘azy=false