session.close()和releaseSession(session)的区别

頑笑 2009-12-23 10:10:56
Hibernate中有一个session.close()方法,可以关闭session,整合Spring之后,Spring中继承HibernateDaoSupport只有也有一个releaseSession(session)方法可以释放session,两者有什么区别呢?
我看了Spring2.5的部分源码,发现releaseSession(session)方法中也会调用session.close()方法,但是它调用之前做的操作我就没有看明白了,希望有研究的朋友能指点一下,或者大家讨论讨论啊。
...全文
1244 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
YANGYANG111310 2011-09-29
  • 打赏
  • 举报
回复
顶一下楼上的各位大侠
yanliping1107 2010-09-15
  • 打赏
  • 举报
回复
session.close(),releaseSession(session)都是关闭session,但releaseSession会判断你是否配置了事务处理,如果有,则不做任何处理.举例来说,假如你service层配置了事务,当你在dao层执行了session.close()程序会报session is close异常,而执行releaseSession(session)的话,则不会,如果你配置了事务,spring会自动帮你close seesion.
yanliping1107 2010-09-10
  • 打赏
  • 举报
回复
Johnson_Hong 2009-12-24
  • 打赏
  • 举报
回复
releaseSession是spring里关闭非线程绑定session的方法,如果session绑定到spring的threadlocal,spring则不会关闭。
如果项目里没有对spring和hibernate非常了解的人,请不要随便调用底层的api
没有特殊的需要的话,spring+hibernate的应用里一般都不用通过写代码来关闭session
頑笑 2009-12-24
  • 打赏
  • 举报
回复
等高手出现
jbt202 2009-12-23
  • 打赏
  • 举报
回复
Spring是全局性轻量级框架。 如果你用spring了 那你的项目基本都是spring控制的。
包括hibernate里的session 在application没有关闭之前 spring会一直保留session的可用性。
也就是说spring缓存了备用的session 至于缓存的个数(不明) spring封装的close方法只是把你类中的session释放到了缓存中。。。
如果没有spring 那么在每次做完操作后session关闭。 再其他地方要用session 我们都要new一个。
有了spring后 它在项目发布启动时拿链接 之后一直循环着用。
boboo_2000_0 2009-12-23
  • 打赏
  • 举报
回复
releaseSession(session)是Spring对session操作进行的包装,而session.close()是Hibernate本身的实现。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧