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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Hibernate的检索策略

發布時間:2023/12/10 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hibernate的检索策略 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ??? Hibernate的Session在加載一個Java對象時,可以將與這個對象相關聯的其他Java對象都加載到緩存中,以便程序及時調用。但有些情況下,我們不需要加載太多無用的對象到緩存中,一來這樣會撐爆內存,二來增加了訪問數據庫的次數。所以為了合理的使用緩存,Hibernate提供了幾種檢索策略來供用戶選擇。

Hibernate的檢索策略

????? 在Hibernate中主要有三種檢索策略,它們是立即檢索策略、延遲檢索策略、左外連接檢索策略。下面分別介紹一下這三種檢索策略。

立即檢索策略

??????采用立即檢索策略,會將被檢索的對象,以及和這個對象關聯的一對多對象都加載到緩存中。Session的get方法就使用的立即檢索策略。

????? 優點:頻繁使用的關聯對象能夠被加載到緩存中。

????? 缺點:1、占用內存。2、Select語句過多。

延遲檢索策略

????? 采用延遲檢索策略,就不會加載關聯對象的內容直到第一次調用關聯對象時,才去加載關聯對象。在不涉及關聯類操作時,延遲檢索策略只適用于Session的load方法涉及關聯類操作時,延遲檢索策略也能夠適用于get,list等操作

????? 在類級別操作時, 延遲檢索策略,只加載類的OID不加載類的其他屬性,只用當第一次訪問其他屬性時,才回訪問數據庫去加載內容。(這里使用了CGLIB生成了類的代理類)

????? 在關聯級別操作時,延遲檢索策略,只加載類本身,不加載關聯類,直到第一次調用關聯對象時,才去加載關聯對象

????? 程序模式都是用延遲加載策略。如果需要指定使用延遲加載策略。在配置文件中設置<class>的lazy=true,<set>的lazy=true或extra(增強延遲)<many-to-one>的lazy=proxy和no-proxy。

??????優點:由程序決定加載哪些類和內容,避免了大量無用的sql語句和內存消耗。

????? 缺點:在Session關閉后,就不能訪問關聯類對象了。 需要確保在Session.close方法前,調用關聯對象。?

左外連接檢索策略:

??????采用左外連接檢索,能夠使用Sql的外連接查詢,將需要加載的關聯對象加載在緩存中。

??????<set>fetch設置為join,<many-to-one>的fetch設置為 join

????? 優點:1.對應用程序完全透明,不管對象處于持久化狀態,還是游離狀態,應用程序都可以方便的從一個對象導航到與它關聯的對象。2.使用了外連接,select語句數目少。

?????? 缺點:1.可能會加載應用程序不需要訪問的對象,白白浪費許多內存空間。2.復雜的數據庫表連接也會影響檢索性能。?

batch-size屬性:

?????? 無論是立即檢索還是延遲檢索,都可以指定關聯查詢的數量,這就需要使用batch-size屬性來指定,指定關聯查詢數量,以減少批量檢索的數據數目。

轉載于:https://www.cnblogs.com/wukong0214/archive/2013/01/23/2874026.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的Hibernate的检索策略的全部內容,希望文章能夠幫你解決所遇到的問題。

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