關於hibernate中取消懶加載問題

玩過hibernate的人都知道 ,hibernate爲了提高效率,採用了懶加載這個玩意,他好處很多,但是也存在着問題,比如2個類是1對多或者多對一的關係,我需要在view層顯示其中一個類的關聯類,那正常獲取就爆炸了,會報錯說session已經關閉什麼的,這個時候就需要取消懶加載,這裏有3種方式

1.將該類的lazy設置爲false,這種方式我是不推薦的,因爲有時需要懶加載,有時不需要。

2.通過 Hibernate.initialize();這個方法強制去加載.

3.通過opensessioninview的方式,其實就是一個過濾器,就是每次在發送請求的時候,打開session.那麼在view層就能獲取關聯類了,然後請求結束,關閉session,這個方式應該算是目前主流的解決懶加載的方式,唯一的缺點就是延長了session的生命週期。

這裏採用hibernate自帶的OpenSessionInViewFilter代碼如下

 <!-- opsessioninview -->
  <filter>
    <filter-name>openSessionInview</filter-name>
    <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter </filter-class>
    <init-param>
      <param-name>sessionFactoryBeanName</param-name>
      <param-value> sessionFactory</param-value>
    </init-param>
    <init-param>
       <param-name>singleSession</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>openSessionInview</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章