论坛首页 Java版 Hibernate

open session and Hibernate事务处理机制

浏览 9186 次
该帖已经被评为精华帖
作者 正文
最后更新时间:2008-04-28
aniken 写道
hantsy 写道
aniken 写道


request(请求)->open session并开始transaction->controller->View(Jsp)->结束transaction并 close session.



应该是这样的。

Hibernate本身也提供了HibernteFilter,功能类似Spring的OpenSesionInViewFilter,只不过后者是绑定了Spring。
Hibernate wiki 提到的一些高级的Session管理模式,如long conversation (跨越几个请求),在Spring中没有实现。
而在seam发挥得淋漓尽致。



如果流程如上所述,就是一个request只对应一个transaction?

默认情况下,OpenSessionInView 实现的应该是session per request 模式(这在hibernate wiki上有描述)。如果使用jdbc transaction,一个session之内可以先后进行几次事务,在spring中取决于spring实现和事务的使用,Spring内部如何管理Hibernate事务就没有研究过了。
   
0 请登录后投票
最后更新时间:2008-04-28
hantsy 写道
aniken 写道
hantsy 写道
aniken 写道


request(请求)->open session并开始transaction->controller->View(Jsp)->结束transaction并 close session.



应该是这样的。

Hibernate本身也提供了HibernteFilter,功能类似Spring的OpenSesionInViewFilter,只不过后者是绑定了Spring。
Hibernate wiki 提到的一些高级的Session管理模式,如long conversation (跨越几个请求),在Spring中没有实现。
而在seam发挥得淋漓尽致。



如果流程如上所述,就是一个request只对应一个transaction?

默认情况下,OpenSessionInView 实现的应该是session per request 模式(这在hibernate wiki上有描述)。如果使用jdbc transaction,一个session之内可以先后进行几次事务,在spring中取决于spring实现和事务的使用,Spring内部如何管理Hibernate事务就没有研究过了。



我说嘛,上述的流程怎么就对了呢,怎么看也应该是session per request,N transactions per session。
   
0 请登录后投票
最后更新时间:2008-04-30
楼主谈到了一个很好的数据库session维护的方案,从技术上先赞一个!

但个人以为,这样的设计在提倡MVC分离过程中是不好的。我们可以在模型层获取足够的数据,而后关闭session的对话,将完整的model传输到view层,如果view层仍需要数据库支持,这里再次打开一个会话。这样做看似麻烦,但是保证了每个设计层面事务的封闭性。而且我们应该尽量争取在一次的session会话中获得足够的数据,这个是可以尝试的。
   
0 请登录后投票
最后更新时间:2008-05-02
引用
servlet的session机制基于cookies,关闭浏览器的cookies则session失效即不能用网站的登录功能。
如果浏览器关闭了cookies功能,servlet可以使用jsessionid去得到当前的session,但这需要在servlet中多写点代码。如何在mvc框架中使用尚不知道。

没有看过seam如何解决open session in view的问题。
   
0 请登录后投票
最后更新时间:2008-05-02
引用
我们可以大约了解的OpenSessionInViewFilter调用流程: request(请求)->open session并开始transaction->controller->View(Jsp)->结束transaction并 close session.
OpenSessionInViewInterceptor的调用流程如何?类似?
   
0 请登录后投票
最后更新时间:2008-07-30
内容上还是很好解释了open session in view , 还有jdbctransaction以及jta的区别。
但标题有些大, hibernate事务处理机制介绍得并不多,除了jdbctransaction和jta的一些比较就没有其他的了。
   
0 请登录后投票
最后更新时间:2008-08-27
作者提到:在JTA上使用Hibernate 写JTA的Transaction代码,不要写Hibernate的Transaction代码,否则程序会报错;

但是我看了一下hibernate的jdbc transaction和JTA transaction实现,应该不存在楼主所说情况的。我们不需要在外面显式的调用session.close(),在transaction中应该做了这一件事了。
   
0 请登录后投票
最后更新时间:2008-10-03
关注这个主题。
   
0 请登录后投票
最后更新时间:2008-10-05
我觉得 就没怎么深入介绍 open session in view 从根本上是如何解决延迟加载带来的问题的。尤其是结合spring之后。
getHibernateTemplate(),又是怎么从当前线程中获取到session 然后怎么执行,怎么到页面 最后又怎么结束的 事务
   
0 请登录后投票
论坛首页 Java版 Hibernate

跳转论坛:
JavaEye推荐