转自http://blog.163.com/huacai9420@126/blog/static/5215854220113266228623/
在集成ssh2三大框架的时候很容易就会造成懒加载异常,通常显示的错误信息是:
org.hibernate.LazyInitializationException: failed to lazily initialize还有提示说:
no session or session was closed
解决方法:
在web.xml文件中加入一个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>
分析原理:
作用是拦截".action“结尾的请求,OpensessionInViewFilter的作用是将session延时关闭。
![Hibernate中懒加载错误的解决方法 - 九鬼 - 朝阳起又落](http://img128.ph.126.net/nc2JO9BfWKv5DFpldxfALQ==/2104869875844064398.png)
在action类中会调用service层的方法,然后调用session.一般当session访问结束之后就会将session关闭.
比如我们要得到user的列表,默认情况下是不会将其中的roles的所有信息全部查出来的,最多只给出一个id,或者是name.
但是我们这个时候如果要打印roles的类容,就会报懒加载异常了.因为hibernate根本就没有将role的数据查出来.