内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

如何解決Hibernate懶加載-創(chuàng)新互聯(lián)

這篇文章主要介紹了如何解決Hibernate懶加載,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

阿巴嘎ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!

所謂懶加載(lazy)就是延時(shí)加載,延遲加載。

什么時(shí)候用懶加載呢,我只能回答要用懶加載的時(shí)候就用懶加載。

至于為什么要用懶加載呢,就是當(dāng)我們要訪問的數(shù)據(jù)量過大時(shí),明顯用緩存不太合適,因?yàn)閮?nèi)存容量有限,為了減少并發(fā)量,減少系統(tǒng)資源的消耗,我們讓數(shù)據(jù)在需要的時(shí)候才進(jìn)行加載,這時(shí)我們就用到了懶加載。

例如,有一個(gè)對(duì)象是Employee,還有一個(gè)對(duì)象是Department。顯然,對(duì)于Employee相對(duì)Department來(lái)說,是多對(duì)一的關(guān)系;而對(duì)于Department相對(duì)Employee來(lái)說,是一對(duì)多的關(guān)系。當(dāng)我們查詢Employee對(duì)象的時(shí)候,如果希望通過employee對(duì)象的屬性department查詢到所對(duì)應(yīng)的Department,那么是會(huì)拋出異常的。這是因?yàn)閼屑虞d的存在,在session關(guān)閉之后,hibernate又向數(shù)據(jù)庫(kù)發(fā)出一次請(qǐng)求,結(jié)果就拋出異常了。

下面總結(jié)的是解決這個(gè)問題的四種方式:

1.顯式初始化(在查詢方法內(nèi)部)

要查詢某員工屬于哪個(gè)部門的時(shí)候,需要對(duì)Department進(jìn)行預(yù)先查詢

使用語(yǔ)句

Hibernate.initialize(Department.class);

如何解決Hibernate懶加載

2.修改對(duì)象關(guān)系文件,將lazy改寫lazy=false,即關(guān)閉懶加載

以上兩種方法,確實(shí)可以解決問題,但是缺點(diǎn)是無(wú)論后面是否使用該對(duì)象,hibernate都會(huì)向數(shù)據(jù)庫(kù)發(fā)出SQL語(yǔ)句請(qǐng)求數(shù)據(jù),造成不必要的性能浪費(fèi)。

3.使用過濾器(web項(xiàng)目)

①獲取session的方式必須使用getCurrentSession

②特殊的關(guān)閉session方式

public void doFilter(ServletRequest request, ServletResponse response, 
   FilterChain arg2) throws IOException, ServletException { 
  // TODO Auto-generated method stub 
  Session session = null; 
  Transaction tx = null; 
  try { 
   session = HibernateUtil.getCurrentSession(); 
   tx = session.beginTransaction(); 
   arg2.doFilter(request, response);//請(qǐng)求一直在走 
   tx.commit(); 
  } catch (Exception e) { 
   // TODO: handle exception 
   if(tx != null){ 
    tx.rollback(); 
   } 
  }finally{ 
   //特殊的關(guān)閉方式 
   HibernateUtil.closeCurrentSession(); 
  } 
 }

4.在SSH框架中,使用spring提供的openSessionView

其原理和第三種方法中使用Filter類似,只不過這個(gè)filter是spring提供的。使用時(shí)只需要在web.xml文件配置如下:

<!-- 使用spring解決懶加載問題 --> 
 <filter> 
  <filter-name>OpenSessionInViewFilter</filter-name> 
  <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> 
 </filter> 
 <filter-mapping> 
  <filter-name>OpenSessionInViewFilter</filter-name> 
  <url-pattern>/*</url-pattern> 
 </filter-mapping>

第3和第4中方法也能解決懶加載的問題,其中第4種方法也是目前使用較多的。但是這兩種方法也是有缺點(diǎn)的,缺點(diǎn)就是延長(zhǎng)了session關(guān)閉的時(shí)間,session的生命周期變長(zhǎng)。沒有使用該方法之前,session是在查詢完數(shù)據(jù)之后,就被關(guān)閉了;而現(xiàn)在,session的關(guān)閉是在一次web請(qǐng)求的最后才關(guān)閉。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“如何解決Hibernate懶加載”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

新聞標(biāo)題:如何解決Hibernate懶加載-創(chuàng)新互聯(lián)
URL標(biāo)題:http://www.rwnh.cn/article38/cchgsp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、外貿(mào)建站、自適應(yīng)網(wǎng)站、網(wǎng)站排名、網(wǎng)站設(shè)計(jì)、品牌網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

小程序開發(fā)
搜索| 浏阳市| 绥江县| 长子县| 伊春市| 高淳县| 文水县| 商南县| 子长县| 泸水县| 岳池县| 二手房| 双牌县| 无锡市| 龙井市| 石河子市| 彩票| 宝应县| 洪湖市| 壶关县| 洱源县| 井陉县| 开封县| 台江县| 岐山县| 武义县| 南江县| 西昌市| 汤原县| 武威市| 来凤县| 新郑市| 五指山市| 木兰县| 石河子市| 鹤壁市| 新蔡县| 德钦县| 八宿县| 中牟县| 新民市|