1. 程式人生 > >解決spring+springMVC+Hibernate+spring-data-jpa懶載入No session問題

解決spring+springMVC+Hibernate+spring-data-jpa懶載入No session問題

在使用懶載入的時候常常會遇到No session問題,其實是在web.xml檔案中忘記新增懶載入的過濾器了。

懶載入異常:org.hibernate.LazyInitializationException: could not initialize proxy - no Session
這是一個lazy使用後的Exception,使用遲時載入,在session(hibernate裡的session),關閉後使用該物件的未載入變數,也就是說session已經關閉,沒有儲存到記憶體中,然後你使用了,導致該異常。

在Java Web專案中使用Hibernate經常會遇到LazyInitializationException。這是因為controller和model層(java程式碼)將通過JPA的一些啟用了延遲載入功能的領域(如用getRefrence()方法或者在關聯關係中採用fetch=FetchType.LAZY)返回給view層(jsp程式碼)的時候,由於載入領域物件的JPA Session已經關閉,導致這些延遲載入的資料訪問異常。

這時就可以使用OpenEntityManagerInViewFilter來將一個JPAsession與一次完整的請求過程對應的執行緒相繫結。

<!-- 解決spring data jpa 事務懶載入 -->
  <filter>
      <filter-name>openEntityManagerInViewFilter</filter-name>
      <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
  </filter>
  <filter-mapping>
      <filter-name>openEntityManagerInViewFilter</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>