日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hql懒加载后判断对象是否存在_hibernate延迟加载(懒加载)详解

發布時間:2024/9/3 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hql懒加载后判断对象是否存在_hibernate延迟加载(懒加载)详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

延遲加載

一.什么是懶加載?他的作用?

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

Hibernate中主要是通過代理(proxy)機制來實現延遲加載。它的具體過程:Hibernate叢數據庫獲取某一個對象數據時、獲取某一個對象的集合屬性值時,或獲取某一個對象所關聯的另一個對象時,由于沒有使用該對象的數據,hibernate并不是數據庫加載真正的數據,而只是為該對象創建一個代理對象來代表這個對象,這個對象上的所有屬性都是默認值;只有在真正需要使用該對象的數據時才創建這個真實對象,真正從數據庫中加載它的數據,這樣在某些情況下,就可以提高查詢效率。

有如下程序代碼:

User user=(User)session.load(clazz, id);//直接返回的是代理對象

System.out.println(user.getId());//沒有發送sql語句到數據庫加載

user.getName();//創建真實的User實例,并發送sql語句到數據庫中

注意:1.不能判斷User=null;代理對象不可能為空

代理對象的限制:和代理關聯的session對象,如果session關閉后訪問代理則拋異常。session關閉之前訪問數據庫

2.getId()方法不行因為參數為ID,getClass()方法不用訪問數據庫就可以得到的數據

Hibernate中默認采用延遲加載的情況主要有以下幾種

1,當調用session上的load()加載一個實體時,會采用延遲加載。

2,當session加載某個實體時,會對這個實體中的集合屬性值采用延遲加載

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

二.關閉延遲加載

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

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

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

3.???? 當session加載某個實體時,不需要對這個實體所單端關聯的另一個實體對象延遲加載,就可以在影射文件中針對這個單端關聯的配置元素()添加lazy=false;

三.抓取策略

通過asm和cglib二個包實現;Domain是非final的。

1.session.load懶加載。

2.one-to-one(元素)懶加載:

必需同時滿足下面三個條件時才能實現懶加載

(主表不能有constrained=true,所以主表沒有懶加載)

lazy!=false 2)constrained=true3)fetch=select

3.one-to-many (元素)懶加載:1)lazy!=false 2)fetch=select

4.many-to-one (元素) :1)lazy!=false 2)fetch=select

5.many-to-many (元素) :1)lazy!=false 2)fetch=select

6.能夠懶加載的對象都是被改寫過的代理對象,當相關聯的session沒有關閉時,訪問這些懶加載對象(代理對象)的屬性(getId和getClass除外)hibernate會初始化這些代理,或用Hibernate.initialize(proxy)來初始化代理對象;當相關聯的session關閉后,再訪問懶加載的對象將出現異常。

分享到:

2015-01-24 06:24

瀏覽 975

評論

總結

以上是生活随笔為你收集整理的hql懒加载后判断对象是否存在_hibernate延迟加载(懒加载)详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。