最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談解決Hibernate懶加載的4種方式

 更新時間:2017年12月22日 11:12:49   作者:最美的詞  
這篇文章主要介紹了淺談解決Hibernate懶加載的4種方式,具有一定借鑒價值,需要的朋友可以參考下。

本文總結了我在學習hibernate的過程中,解決hibernate懶加載問題的四種方式。

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

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

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

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

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

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

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

使用語句

Hibernate.initialize(Department.class); 

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

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

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

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

②特殊的關閉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{ 
   //特殊的關閉方式 
   HibernateUtil.closeCurrentSession(); 
  } 
 } 

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

其原理和第三種方法中使用Filter類似,只不過這個filter是spring提供的。使用時只需要在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種方法也是目前使用較多的。但是這兩種方法也是有缺點的,缺點就是延長了session關閉的時間,session的生命周期變長。沒有使用該方法之前,session是在查詢完數(shù)據(jù)之后,就被關閉了;而現(xiàn)在,session的關閉是在一次web請求的最后才關閉。

總結

以上就是本文關于淺談解決Hibernate懶加載的4種方式的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

相關文章

  • Swagger使用和注釋詳解

    Swagger使用和注釋詳解

    Swagger是一個規(guī)范和完整的框架,用于生成、描述、調用和可視化 RESTful 風格的 Web 服務,這篇文章主要介紹了Swagger使用和注釋介紹,需要的朋友可以參考下
    2024-05-05
  • Git設置和取消代理的方法

    Git設置和取消代理的方法

    今天小編就為大家分享一篇關于Git設置和取消代理的方法,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • 基于maven的springboot的"過時"用法解析

    基于maven的springboot的"過時"用法解析

    這篇文章主要為大家介紹了基于maven的springboot"過時"用法示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • spring cloud gateway中redis一直打印重連日志問題及解決

    spring cloud gateway中redis一直打印重連日志問題及解決

    這篇文章主要介紹了spring cloud gateway中redis一直打印重連日志問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java 如何通過Magic 魔數(shù)獲取文件類型

    Java 如何通過Magic 魔數(shù)獲取文件類型

    魔數(shù)有很多種定義,這里我們討論的主要是在編程領域的定義,文件的起始幾個字節(jié)的內容是固定的,本文給大家介紹Java Magic 魔數(shù)獲取文件類型的相關知識,感興趣的朋友一起看看吧
    2023-11-11
  • spring?java?動態(tài)獲取consul?K/V的方法

    spring?java?動態(tài)獲取consul?K/V的方法

    這篇文章主要介紹了spring?java?動態(tài)獲取consul?K/V的相關資料,主要包括springConsul配置kv路徑以及自動注入consulKV到服務中,本文給大家介紹的非常詳細,需要的朋友可以參考下
    2023-10-10
  • Spring Boot 自動配置的實現(xiàn)

    Spring Boot 自動配置的實現(xiàn)

    這篇文章主要介紹了Spring Boot 自動配置的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • SpringBoot整合MyBatis-Plus樂觀鎖不生效的問題及解決方法

    SpringBoot整合MyBatis-Plus樂觀鎖不生效的問題及解決方法

    這篇文章主要介紹了SpringBoot整合MyBatis-Plus樂觀鎖不生效的問題解決方案,通過實例代碼介紹了SpringBoot各個層次的操作,需要的朋友可以參考下
    2022-04-04
  • JAVA HTTP反向代理實現(xiàn)過程詳解

    JAVA HTTP反向代理實現(xiàn)過程詳解

    這篇文章主要介紹了JAVA HTTP反向代理實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • 基于idea把maven工程轉換為web項目

    基于idea把maven工程轉換為web項目

    這篇文章主要介紹了基于idea把maven工程轉換為web項目,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04

最新評論

韶关市| 浮梁县| 调兵山市| 大厂| 姜堰市| 广丰县| 中方县| 叙永县| 普定县| 赫章县| 略阳县| 大姚县| 青川县| 武宣县| 项城市| 永泰县| 霞浦县| 舒兰市| 辽宁省| 鞍山市| 滦南县| 江口县| 宁化县| 潞城市| 若羌县| 皋兰县| 武定县| 偃师市| 南皮县| 邻水| 新安县| 武邑县| 拉萨市| 理塘县| 上虞市| 容城县| 平乐县| 平山县| 政和县| 织金县| 隆尧县|