解決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>
發佈了147 篇原創文章 · 獲贊 30 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章