国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務(wù)器之家 - 編程語言 - JAVA教程 - 淺談Hibernate n+1問題

淺談Hibernate n+1問題

2021-04-05 13:30隨緣121 JAVA教程

這篇文章主要介紹了淺談Hibernate n+1問題,怎么解決n+1問題,文中也作了簡要分析,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下

在Session的緩存中存放的是相互關(guān)聯(lián)的對(duì)象圖。默認(rèn)情況下,當(dāng)Hibernate從數(shù)據(jù)庫中加載Customer對(duì)象時(shí),會(huì)同時(shí)加載所有關(guān)聯(lián)的 Order對(duì)象。以Customer和Order類為例,假定ORDERS表的CUSTOMER_ID外鍵允許為null

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

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

運(yùn)行以上find()方法時(shí),Hibernate將先查詢CUSTOMERS表中所有的記錄,然后根據(jù)每條記錄的ID,到ORDERS表中查詢有參照關(guān)系的記錄,Hibernate將依次執(zhí)行以下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個(gè)Customer對(duì)象和5個(gè)Order對(duì)象,在內(nèi)存中形成了一幅關(guān)聯(lián)的對(duì)象圖.

Hibernate在檢索與Customer關(guān)聯(lián)的Order對(duì)象時(shí),使用了默認(rèn)的立即檢索策略。這種檢索策略存在兩大不足:

(1) select語句的數(shù)目太多,需要頻繁的訪問數(shù)據(jù)庫,會(huì)影響檢索性能。如果需要查詢n個(gè)Customer對(duì)象,那么必須執(zhí)行n+1次select查詢語 句。這就是經(jīng)典的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)在應(yīng)用邏輯只需要訪問Customer對(duì)象,而不需要訪問Order對(duì)象的場合,加載Order對(duì)象完全是多余的操作,這些多余的Order對(duì)象白白浪費(fèi)了許多內(nèi)存空間。

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

對(duì)數(shù)據(jù)庫訪問還是必須考慮性能問題的, 在設(shè)定了1 對(duì)多這種關(guān)系之后, 查詢就會(huì)出現(xiàn)傳說中的n +1 問題。

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

2)多對(duì)1 ,在多方,查詢得到了m個(gè)對(duì)象,那么也會(huì)將m個(gè)對(duì)象對(duì)應(yīng)的1 方的對(duì)象取出, 也變成了m+1

怎么解決n +1 問題?

1 )lazy=true, hibernate3開始已經(jīng)默認(rèn)是lazy=true了;lazy=true時(shí)不會(huì)立刻查詢關(guān)聯(lián)對(duì)象,只有當(dāng)需要關(guān)聯(lián)對(duì)象(訪問其屬性,非id字段)時(shí)才會(huì)發(fā)生查詢動(dòng)作。

2)二級(jí)緩存, 在對(duì)象更新,刪除,添加相對(duì)于查詢要少得多時(shí), 二級(jí)緩存的應(yīng)用將不怕n +1 問題,因?yàn)榧词沟谝淮尾樵兒苈笾苯泳彺婷幸彩呛芸斓摹?br /> 不同解決方法,不同的思路,第二條卻剛好又利用了n +1 。

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

總結(jié)

以上就是本文關(guān)于淺談Hibernate n+1問題的全部內(nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!

原文鏈接:http://blog.csdn.net/u011202334/article/details/51519244

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 成人在线视频网 | 日韩理伦片在线观看视频播放 | 精品国产乱码久久久久久丨区2区 | 一区视频在线 | 国产成人精品久久二区二区 | 日本不卡免费新一二三区 | 国产成人精品免高潮在线观看 | 黄色国产| 国产精品视频免费 | 日韩超级大片免费看国产国产播放器 | 久久久久av69精品 | 欧美综合色 | 日本一区二区视频免费观看 | 精品久久久久一区二区国产 | 国产精品国产三级国产aⅴ中文 | 精品粉嫩超白一线天av | 婷婷综合网 | 日本久久网 | 日韩欧美中文字幕一区二区三区 | 久久久九色 | 中文字幕精品视频 | 国产激情精品一区二区三区 | 一区二区精品在线 | 青青草欧美 | 最近韩国日本免费高清观看 | 国产农村妇女精品久久 | 精品国产不卡一区二区三区 | 亚洲第一av网站 | 黄色一级毛片免费看 | av在线综合网 | 国产成人精品久久二区二区91 | 亚洲精品电影在线观看 | 日韩在线精品强乱中文字幕 | 精精国产xxxx视频在线野外 | 精品综合久久 | av看片网| av一区二区在线观看 | 国产精品一卡二卡三卡 | 精品一区二区久久久久黄大片 | 久久中文字幕一区 | 亚洲成av人片在线观看 |