解決spring+springMVC+Hibernate+spring-data-jpa懶載入No session問題
阿新 • • 發佈:2019-02-01
在使用懶載入的時候常常會遇到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>