Hibernare延遲加載

1、延遲加載及其作用

延遲加載,也叫懶加載,是Hibernate爲提高程序執行效率提供的一種機制,即只有真正使用該對象的數據時纔會創建。

Hibernate中主要通過代理(proxy)機制實現延遲加載。

具體過程:

Hibernate從數據庫獲取某一個對象數據,獲取某一個對象的集合屬性值時,或獲取某一個對象所關聯的另一個對象時,由於沒有使用該對象的數據,Hibernate並不是數據庫加載真正的數據,而只是爲該對象創建一個代理對象來代表這個對象,這個對象上的所有屬性值都是默認值;只有在真正需要使用對象的數據時才創建這個真實對象,真正從數據庫中加載它的數據,這樣在某些情況下,就可以提高查詢效率。

有如以下程序代碼:

User user=(User)session.load(User.class,id);//直接返回的是代理對象
System.out.println(user.getId());//沒有發送sql語句到數據庫加載
user.getName();//創建真實的User實例,併發送sql語句到數據庫中
Hibernate默認採用延遲加載的情況主要有一下幾種:

①當調用session上的load()加載一個實體時;

②當session加載某一個實體時,會對這個實體中的集合屬性值採用延遲加載;

③當session加載某一個實體時,會對這個實體所有單端關聯的另一個實體對象採用延遲加載。


2、關閉延遲加載

延遲加載確實會給程序的查詢效率帶來好處,但有時明確知道數據需要立即加載,如果Hibernate先默認使用延遲加載,而後又必須去數據庫加載,反而會降低效率。

①加載單個實體,如果不需要延遲加載,就可以使用session的get()方法;

②當session加載某個實體時,不需要對這個實體中的集合屬性值延遲加載,而是要立即加載,這可以在映射文件中的這個集合配置元素(set,bag,list)添加屬性lazy="false";

③當session加載某個實體時,不需要對這個實體所單端關聯的另一個實體對象延遲加載,可以在映射文件中針對這個單端關聯的配置元素(<one-to-one>,<many-to-one>)添加lazy="false"。

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