懶加載異常的意思的就是:還用不到的東西,就先不加載,等需要的時候再來加載。
所以懶加載對性能有一定的提升,但是,這也會出現一些問題,一般來說,事務開始的時候Session就被獲取,事務結束的時候Session就會被關閉。所以懶加載會出現Session已關閉,卻還是去調用Session,從而報Session為空的錯誤。
據我所知道解決這個問題的方法有兩個:一個就是關閉懶加載異常。(一般不推薦!因為關閉了,就不能使用懶加載的好處了)
另一個方法就是把Session的關閉延后。(推薦使用)
在使用第二種方法解決這個問題時,要先了解一下事務、Session等的調用過程:
如:

因為在顯示層的時候要使用到懶加載屬性,所以要讓Session到顯示層調用了懶加載之后在關閉。

那么可以把Session的關閉交給Filter或Interceptor,因為很多程序都要用到這個功能,所以有人已經實現了這個功能。
也就是:
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
只要配置這個Filter就可以了。
如下:
<!-- 防止懶加載異常的過濾器 -->
<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>*.action</url-pattern>
</filter-mapping>
不過要注意的一件事!
就是這個OpenSessionInViewFilter 過濾器要配置在Struts配置之前。
不然會無效!!
附件列表