SSH - org.hibernate.LazyInitializationException: could not initialize proxy - no Session问题解决办法

本文介绍了在使用Hibernate框架进行一对多查询时遇到的LazyInitializationException异常,并详细解释了解决方案。作者发现问题根源在于DAO层的Session管理不当,通过调整Session的关闭时机并配置线程管理Session的方式成功解决了该问题。

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

最近用hibernate一对多查询的时候获取外键所对应的表的字段时总是报如下错误:

org.hibernate.LazyInitializationException: could not initialize proxy - no Session

在网上看了相关的问题解决方案觉得是lazy的关系,就是默认开启了懒查询导致的,于是又搜索了一大堆关于lazy的设置方法,在hibernate配置中手动设置lazy和在web.xml文件中添加filter,问题都没能解决,左右思考半天网上看到一篇关于session 的帖子把我的问题解决了。

其实我的hibernate配置文件都是myeclipse自动生成的,myeclipse帮我们做好的东西一般是没有错误的,关键在于我的dao层里的增删改查各个方法写的不对,hibernate中如果要使用lazy的话,除了需要配置以外,还需要当前hibernate的session没有关闭,而我使用的dao文件里本来是没有考虑这个的,在每个方法里都把session给关闭了,以至于后来出现了问题,所以,解决方法就是每个session使用后提交但不关闭就可以了,这样当调用lazy的时候就不会出现on session啦!很简单吧。

问题是解决了,但session一直开着是不是有点浪费资源呢?于是在/hibernate.cfg.xml中添加下面这一句:

<property name="current_session_context_class">thread</property>

这句的作用就是把session交给线程来管理,线程自动关闭session。相信还有一些像我这样的新手遇到类似的问题,这里贴出来和大家一起分享,

<PS:第一帖,留此纪念!>

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值