用hibernate的 getCurrentSession取的 session什么时候关闭?

getCurrentSession这个session什么时候关闭?如果用了这个session。save或者updaet操作了会自动关闭吗?一般项目中除了手动session... getCurrentSession 这个session什么时候关闭?如果用了这个session。save或者updaet操作了 会自动关闭吗?一般项目中除了手动session。close写外 封装好的项目中是什么时候对它进行关闭??
求大神帮助~
展开
 我来答
stefwujj
2013-09-29 · TA获得超过417个赞
知道小有建树答主
回答量:141
采纳率:100%
帮助的人:207万
展开全部
你好,getCurrentSession得到的session是和事务绑定的session,所以:
1,要用getCurrentSession生产的session,就必须有事务环境,意思就是你必须在调用session方法之前,session.beginTransaction();就算你只是get或者query
2,在事务提交之后,即session.getTransaction().commit()之后,session自动关闭,所以你用getCurrentSession,只需要commit事务,不要去调用session.close()

3,你用的是ssh,spring为hibernate的current_session_context_class配置了一个SpringSessionContext来帮你管理getCurrentSession中的session,所以,你在OpenSessionInview的时候,spring就自动的帮你打开了session——>你在执行用AOP包装的事务的时候,事务就开启了——>执行你的业务方法——>提交事务(注意,hibernate管理的getCurrentSession在提交事务的时候才会关闭session,而spring提供的这个SpringSessionContext不会)——>opensessioninview关闭session。
从上面的执行流程可以看出,你在SSH集成的时候,如果用的是getCurrentSession的集成方式,就不能设置hibernate的current_session_context_class为thread,而应该空着,让spring帮你。
更多追问追答
追问
只是事务是什么时候自动提交?因为现在很多项目都是封装好的  看不出来什么时候进行了关闭。这里的配置文件能看出事务什么时候提交吗?  
追答
你要只问在ssh下事务什么时候提交的,那就是在你匹配的方法执行完成之后提交。比如find*,那匹配的findXXX方法执行完了事务就提交了。但是事务提交并不意味session就关闭了。
秦时明月饼
2013-09-25 · TA获得超过141个赞
知道答主
回答量:108
采纳率:0%
帮助的人:78.2万
展开全部
不用关闭,可以一直继续用。直到你退出这个进程就自动销毁了吧。用openSession时要记得关闭。
更多追问追答
追问
你没理解我想知道的意思,。。我知道现在很多项目都用了ssh封装好的  我只是想知道事务什么提交,是在哪了能看到这个配置
追答
ssh事务控制一般写在applicationContext.xml里,采用AOP的方式控制事务提交。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Oo海之蓝歌oO
2013-09-25 · 喜欢计算机有关的东东
Oo海之蓝歌oO
采纳数:244 获赞数:876

向TA提问 私信TA
展开全部
在当前事务完成时会自动关闭。策略要参考你的事务配置。
追问
那当前事务是什么时候关闭??执行save方法后?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式