Load和get方法的區別

 

1.    讀取時機不同(當lazy=true的時候)

load是採用延遲機制(load語句不讀庫,等使用非主鍵時纔去讀庫),而get不採用延遲機制(get語句時馬上讀庫);

2.    搜索不到數據時的情況

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

1 get不支持lazy   load支持lazy

2 採用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

<class>標籤上的lazy特性只對普通屬性起作用

hibernate在集合上的lazy策略,取值false,true,extra

<class>標籤上的lazy不會影響到集合上面的lazy特性,lazy默認爲true;

集合標籤上面的lazy特性推薦使用 extra 因爲比較智能

 

在<class>上lazy爲true時,load時不發出sql語句,只有在使用是才發出。

爲false時load時就馬上發出sql語句。

 

在<class>上lazy爲true時,load時不發出sql語句,只有使用時才發出。

爲false時在第一次load時就執行全部sql語句。爲extra時,和true差不多,不過發出的sql語句比較智能。

 

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

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

 

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章