【问题标题】:hibernate session close休眠会话关闭
【发布时间】:2012-03-10 05:14:57
【问题描述】:

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

sessionFactory.getCurrentSession();

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

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

第三个问题(抱歉,我突然想到了)使用 hibernate/struts2 进行缓存的最佳选择是什么?

【问题讨论】:

  • 一个问题太多了。

标签: hibernate session caching struts2 interceptor


【解决方案1】:

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

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

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

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

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

如您所见,文档中有很多有趣的信息。我建议阅读它。

【讨论】:

    【解决方案2】:

    需要更多信息来回答你的问题,比如你是如何使用休眠的,我们真的不知道你在关注哪个教程:)关于你的问题

    1. 休眠会话代表一个工作单元,关闭会话总是好的做法。我没有看到休眠会话与用户登录/注销过程的关系。请不要将网络会话的概念与休眠会话混为一谈因为两者完全不同。
    2. 对于 hibernate 级别的缓存,您可以使用 ehcache 作为二级缓存,hibernate 为您提供开箱即用的一级缓存,对于 Struts2 方面,我会推荐 EHCache,这是一个整体良好且灵活的缓存解决方案。

    我的建议是,如果您正在学习 Strust2 和 Hibernate,那么最好跳过缓存部分并专注于核心领域

    【讨论】:

      猜你喜欢
      • 2011-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多