休眠会话关闭

时间:2012-02-19 17:28:00

标签: hibernate session caching struts2 interceptor

我只是按照一个简单的hibernate struts教程,通过hibernate成功地进行了db调用。但是,我没有看到代码在任何地方关闭hibernate连接。

sessionFactory.getCurrentSession();

用于获取每个请求的会话。我应该在用户注销时关闭此会话吗?或者在每个请求之后是否由框架处理?

第二个相关问题是,在什么样的用例中我会使用hibernate会话拦截器?

还有第三个问题(很遗憾,它刚刚出现在我的脑海中)用hibernate / struts2进行缓存的最佳选择是什么?

2 个答案:

答案 0 :(得分:5)

关于第一个问题,reference documentation说:

  

org.hibernate.Session在第一次调用时开始   getCurrentSession()是针对当前线程的。然后绑定   通过Hibernate到当前线程。当交易结束时,或者   通过提交或回滚,Hibernate自动解除绑定   来自线程的org.hibernate.Session并为您关闭它。

关于第二个问题,the documentation说:

  

Interceptor接口提供从会话到的回调   应用程序,允许应用程序检查和/或操作   保存,更新,删除之前持久对象的属性   或装载。一个可能的用途是跟踪审计信息。   例如,以下Interceptor自动设置   创建Auditable时的createTimestamp并更新   更新Auditable时的lastUpdateTimestamp属性。

关于第三个问题,Struts2是一个演示框架。它与持久性无关,因此与持久化实体的缓存无关。 The documentation详细讨论了二级缓存。

如您所见,文档中包含大量有趣的信息。我建议你阅读它。

答案 1 :(得分:2)

需要更多信息来回答您的问题,例如您如何使用hibernate,我们真的很无知您正在关注哪些教程:)关于您的问题

  1. Hibernate会话代表一个工作单元,关闭session是一个很好的做法。我没有看到hibernate会话与用户登录/注销过程的关系。请不要将web-session的概念与hibernate session混合在一起因为两者完全不同。
  2. 对于hibernate级别的缓存,您可以使用ehcache作为二级缓存,hibernate为您提供开箱即用的一级缓存,对于Struts2方面,我将推荐EHCache,这是一个整体良好且灵活的缓存解决方案。
  3. 我的建议是,如果你正在学习Strust2和Hibernate,那么最好跳过缓存部分并专注于核心领域

相关问题