真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何解決Hibernate懶加載

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

網(wǎng)站建設(shè)公司,為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計及定制網(wǎng)站建設(shè)服務(wù),專注于企業(yè)網(wǎng)站制作,高端網(wǎng)頁制作,對木屋等多個行業(yè)擁有豐富的網(wǎng)站建設(shè)經(jīng)驗的網(wǎng)站建設(shè)公司。專業(yè)網(wǎng)站設(shè)計,網(wǎng)站優(yōu)化推廣哪家好,專業(yè)成都網(wǎng)站推廣優(yōu)化,H5建站,響應(yīng)式網(wǎng)站。

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

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

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

例如,有一個對象是Employee,還有一個對象是Department。顯然,對于Employee相對Department來說,是多對一的關(guān)系;而對于Department相對Employee來說,是一對多的關(guān)系。當我們查詢Employee對象的時候,如果希望通過employee對象的屬性department查詢到所對應(yīng)的Department,那么是會拋出異常的。這是因為懶加載的存在,在session關(guān)閉之后,hibernate又向數(shù)據(jù)庫發(fā)出一次請求,結(jié)果就拋出異常了。

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

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

要查詢某員工屬于哪個部門的時候,需要對Department進行預(yù)先查詢

使用語句

Hibernate.initialize(Department.class);

如何解決Hibernate懶加載

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

以上兩種方法,確實可以解決問題,但是缺點是無論后面是否使用該對象,hibernate都會向數(shù)據(jù)庫發(fā)出SQL語句請求數(shù)據(jù),造成不必要的性能浪費。

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

①獲取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);//請求一直在走 
   tx.commit(); 
  } catch (Exception e) { 
   // TODO: handle exception 
   if(tx != null){ 
    tx.rollback(); 
   } 
  }finally{ 
   //特殊的關(guān)閉方式 
   HibernateUtil.closeCurrentSession(); 
  } 
 }

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

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

 
  
  OpenSessionInViewFilter 
  org.springframework.orm.hibernate3.support.OpenSessionInViewFilter 
  
  
  OpenSessionInViewFilter 
  /* 
 

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

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


名稱欄目:如何解決Hibernate懶加載
當前地址:http://weahome.cn/article/ppjdeo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部