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

Hibernate中有一个session.close()方法,可以关闭session,整合Spring之后,Spring中继承HibernateDaoSupport只有也有一个releaseSession(session)方法可以释放session,两者有什么区别呢?
我看了Spring2.5的部分源码,发现releaseSession(session)方法中也会调用session.close()方法,但是它调用之前做的操作我就没有看明白了,希望有研究的朋友能指点一下,或者大家讨论讨论啊。

Spring是全局性轻量级框架。 如果你用spring了 那你的项目基本都是spring控制的。  
包括hibernate里的session 在application没有关闭之前 spring会一直保留session的可用性。
也就是说spring缓存了备用的session 至于缓存的个数(不明) spring封装的close方法只是把你类中的session释放到了缓存中。。。
如果没有spring 那么在每次做完操作后session关闭。 再其他地方要用session 我们都要new一个。
有了spring后 它在项目发布启动时拿链接 之后一直循环着用。

releaseSession(session)是Spring对session操作进行的包装,而session.close()是Hibernate本身的实现。

releaseSession是spring里关闭非线程绑定session的方法,如果session绑定到spring的threadlocal,spring则不会关闭。
如果项目里没有对spring和hibernate非常了解的人,请不要随便调用底层的api
没有特殊的需要的话,spring+hibernate的应用里一般都不用通过写代码来关闭session

session.close(),releaseSession(session)都是关闭session,但releaseSession会判断你是否配置了事务处理,如果有,则不做任何处理.举例来说,假如你service层配置了事务,当你在dao层执行了session.close()程序会报session is close异常,而执行releaseSession(session)的话,则不会,如果你配置了事务,spring会自动帮你close seesion.

你可能感兴趣的:(releasesession)