Hibernate懒加载异常解决

本文深入分析了在集成SSH2三大框架时遇到的懒加载异常问题,详细解释了错误信息org.hibernate.LazyInitializationException及nosessionorsessionwasclosed的含义,并提供了解决方案:在web.xml文件中加入OpenSessionInViewFilter。通过这一过滤器,可以拦截.action结尾的请求,使session在特定场景下延时关闭,从而避免懒加载异常的发生。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 
在集成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中懒加载错误的解决方法 - 九鬼 - 朝阳起又落
 
在action类中会调用service层的方法,然后调用session.一般当session访问结束之后就会将session关闭.
比如我们要得到user的列表,默认情况下是不会将其中的roles的所有信息全部查出来的,最多只给出一个id,或者是name.
但是我们这个时候如果要打印roles的类容,就会报懒加载异常了.因为hibernate根本就没有将role的数据查出来.

说的就点点混乱了,不过明白了懒加载的原理之后就很容易明白为什么会出这种错误了.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值