懒加载异常的意思的就是:还用不到的东西,就先不加载,等需要的时候再来加载。
所以懒加载对性能有一定的提升,但是,这也会出现一些问题,一般来说,事务开始的时候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配置之前。
不然会无效!!
附件列表
本文介绍了解决Hibernate懒加载异常的OpenSessionInViewFilter过滤器。通过将Session关闭延迟到视图层调用完毕,避免了懒加载时Session已关闭的问题。配置此过滤器需确保其在Struts配置前加载。
761

被折叠的 条评论
为什么被折叠?



