日期:2014-05-19  浏览次数:20695 次

hibernate中多次点击造成的session关闭
多次点击一个查询按钮,点击的快了,就会出现session is closed异常,在方法里看了一下,是因为同时进行了两次getSession,前一次的session.close()把session关闭了,第二个session就得不到了,有没有什么好的解决办法

------解决方案--------------------
延时加载,可以将lazy 设置为false, 或是配置OpenSessionInViewFilter(建议使用)
------解决方案--------------------
可以参考 
http://blogger.org.cn/blog/more.asp?name=lhwork&id=20911
------解决方案--------------------
探讨
多次点击一个查询按钮,点击的快了,就会出现session is closed异常,在方法里看了一下,是因为同时进行了两次getSession,前一次的session.close()把session关闭了,第二个session就得不到了,有没有什么好的解决办法

------解决方案--------------------
如果你自己的方式,就是多线程同步的问题,考虑在你的方法前加synchronized;
建议你用spring 吧,让他来管理你的session
------解决方案--------------------
一般是事务
------解决方案--------------------
点击按钮后,记按钮不可用。查询完成之后,再变回来,不就避免上面情况的发生了呀~
------解决方案--------------------
支持用SPRING
------解决方案--------------------
可以在web.xml文件中加上

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

<init-param>
<param-name>singleSession</param-name>
<param-value>false</param-value>
</init-param>

</filter> 

------解决方案--------------------
觉得楼主的程序有点乱:
session当成类变量?没见过这么做的
自己开关闭session?

我的建议:
如果你用了Spring对事物进行了管理,即在Spring的配置文件里面配置了sessionfactory 事务传播特性,哪些包下的那些函数参与事务,然后再你的用你的dao继承hibernatedaosupport ,这样下来你就不用关心事务了,随便用就行了,不用开启关闭。