我只是按照一个简单的hibernate struts教程,通过hibernate成功地进行了db调用。但是,我没有看到代码在任何地方关闭hibernate连接。
sessionFactory.getCurrentSession();
用于获取每个请求的会话。我应该在用户注销时关闭此会话吗?或者在每个请求之后是否由框架处理?
第二个相关问题是,在什么样的用例中我会使用hibernate会话拦截器?
还有第三个问题(很遗憾,它刚刚出现在我的脑海中)用hibernate / struts2进行缓存的最佳选择是什么?
答案 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,我们真的很无知您正在关注哪些教程:)关于您的问题
我的建议是,如果你正在学习Strust2和Hibernate,那么最好跳过缓存部分并专注于核心领域