精品专区-精品自拍9-精品自拍三级乱伦-精品自拍视频-精品自拍视频曝光-精品自拍小视频

網站建設資訊

NEWS

網站建設資訊

Hibernate中n+1問題的示例分析

小編給大家分享一下Hibernate中n+1問題的示例分析,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

創新互聯公司憑借專業的設計團隊扎實的技術支持、優質高效的服務意識和豐厚的資源優勢,提供專業的網站策劃、成都做網站、網站設計、網站優化、軟件開發、網站改版等服務,在成都10年的網站建設設計經驗,為成都上千多家中小型企業策劃設計了網站。

在Session的緩存中存放的是相互關聯的對象圖。默認情況下,當Hibernate從數據庫中加載Customer對象時,會同時加載所有關聯的 Order對象。以Customer和Order類為例,假定ORDERS表的CUSTOMER_ID外鍵允許為null

以下Session的find()方法用于到數據庫中檢索所有的Customer對象:

List customerLists=session.find("from Customer as c");

運行以上find()方法時,Hibernate將先查詢CUSTOMERS表中所有的記錄,然后根據每條記錄的ID,到ORDERS表中查詢有參照關系的記錄,Hibernate將依次執行以下select語句:

select * from CUSTOMERS;
select * from ORDERS where CUSTOMER_ID=1;
select * from ORDERS where CUSTOMER_ID=2;
select * from ORDERS where CUSTOMER_ID=3;
select * from ORDERS where CUSTOMER_ID=4;

通過以上5條select語句,Hibernate最后加載了4個Customer對象和5個Order對象,在內存中形成了一幅關聯的對象圖.

Hibernate在檢索與Customer關聯的Order對象時,使用了默認的立即檢索策略。這種檢索策略存在兩大不足:

(1) select語句的數目太多,需要頻繁的訪問數據庫,會影響檢索性能。如果需要查詢n個Customer對象,那么必須執行n+1次select查詢語 句。這就是經典的n+1次select查詢問題。這種檢索策略沒有利用SQL的連接查詢功能,例如以上5條select語句完全可以通過以下1條 select語句來完成:

select * from CUSTOMERS left outer join ORDERS
on CUSTOMERS.ID=ORDERS.CUSTOMER_ID

以上select語句使用了SQL的左外連接查詢功能,能夠在一條select語句中查詢出CUSTOMERS表的所有記錄,以及匹配的ORDERS表的記錄。

(2)在應用邏輯只需要訪問Customer對象,而不需要訪問Order對象的場合,加載Order對象完全是多余的操作,這些多余的Order對象白白浪費了許多內存空間。

為了解決以上問題,Hibernate提供了其他兩種檢索策略:延遲檢索策略和迫切左外連接檢索策略。延遲檢索策略能避免多余加載應用程序不需要訪問的關聯對象,迫切左外連接檢索策略則充分利用了SQL的外連接查詢功能,能夠減少select語句的數目。

對數據庫訪問還是必須考慮性能問題的, 在設定了1 對多這種關系之后, 查詢就會出現傳說中的n +1 問題。

1 )1 對多,在1 方,查找得到了n 個對象, 那么又需要將n 個對象關聯的集合取出,于是本來的一條sql查詢變成了n +1 條

2)多對1 ,在多方,查詢得到了m個對象,那么也會將m個對象對應的1 方的對象取出, 也變成了m+1

怎么解決n +1 問題?

1 )lazy=true, hibernate3開始已經默認是lazy=true了;lazy=true時不會立刻查詢關聯對象,只有當需要關聯對象(訪問其屬性,非id字段)時才會發生查詢動作。

2)二級緩存, 在對象更新,刪除,添加相對于查詢要少得多時, 二級緩存的應用將不怕n +1 問題,因為即使第一次查詢很慢,之后直接緩存命中也是很快的。
不同解決方法,不同的思路,第二條卻剛好又利用了n +1 。

3) 當然你也可以設定fetch=join(annotation : @ManyToOne() @Fetch(FetchMode.JOIN))

看完了這篇文章,相信你對“Hibernate中n+1問題的示例分析”有了一定的了解,如果想了解更多相關知識,歡迎關注創新互聯行業資訊頻道,感謝各位的閱讀!


網頁標題:Hibernate中n+1問題的示例分析
URL標題:http://m.jcarcd.cn/article/pojgji.html
主站蜘蛛池模板: 国语在线看免费观 | 国产欧美日韩专区 | 国产迷姦 | 日韩在线欧美综合网 | 日韩精品成| 乱伦免费影视亚洲 | 中文字幕亚洲无限码 | 国产免费三a在线 | 日本免费一区二 | 最新日本高清视频免费在线观看 | 92手机看片| 蜜臀98精 | 日韩性生活 | 精品国产亚洲精品 | 91国产国自在线 | 三区免费高清视 | 国产精品欧美专区 | 午夜免费福利影院 | 中文字幕国产欧美 | 欧美亚洲韩日国产 | 日本aⅴ精品 | 日韩国产乱 | 日产乱码一区二区 | 午夜性爱视频免费 | 乱老熟女一区二 | 国产亚洲一 | 91九色蝌蚪 | 精品一卡二卡三 | 97韩剧tv网| 另类猎奇专区 | 91精品人成在 | 日韩成熟熟女精品 | 乱伦国产欧美三级 | 日本亚洲 | 成人激情受网点 | 国产传媒在线播放 | 欧美亚洲日本国 | 日本汚视频在线观 | 国产又色 | 成人免费无 | 欧美午夜网 |