hibernate延迟加载会出现的问题(failed to lazily initialize)

本文出自:http://blog.csdn.net/hongchangfirst    

 当我们用hibernate级联对象的时候,有时候为了效率和避免出现缓存问题,不是用eager,使用lazy延迟加载,但是会出现failed to lazily initialize... no session or session was closed 这种类似的错误。怎么解决呢?有两种办法:


1.设置lazy=false

如果是用annotation,则把fetch=FetchType.LAZY配置如下
fetch=FetchType.EAGER

将fetch类型设置成直接获取

2.就是使用filter,过滤所有的链接
如果在使用filter的时候,要配置事务处理,否则会导致session处于只读状态而不能做修改、删除的动作。

<web-app>

<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate.support.OpenSessionInViewFilter
</filter-class>
</filter>

<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<!--注意这里应该是你spring过滤的时候需要连接后台的过滤字符串-->
<url-pattern>*.do</url-pattern>
</filter-mapping>
</web-app>
 
如果你用的是maven工具进行构建,这时候会出来以下错误:严重: Exception starting filter hibernateFilterjava.lang.ClassNotFoundException: org.springframework.orm.hibernate.support.OpenSessionInViewFilter


这是因为缺少jar包所致,为什么呢?hibernate的核心包都用pom引入了啊?辗转反侧之后,终于找到了问题的所在,因为hibernate3和hibernate4的差异,所以我们在配置filter的时候要注明是hibernate3还是hibernate4,把上边的filter-class修改成如下即可:

<web-app>
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
</filter>

<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<!--注意这里应该是你spring过滤的时候需要连接后台的过滤字符串-->
<url-pattern>*.do</url-pattern>
</filter-mapping>
</web-app>

好的,重新编译,ok了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值