最近用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:第一帖,留此纪念!>