论坛首页 Java企业应用论坛

open session and Hibernate事务处理机制

浏览 34525 次
该帖已经被评为精华帖
作者 正文
   发表时间: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 请登录后投票
   发表时间:2008-11-14  
内容有点老啊,spring 2.0.8中的OpenSessionInView就不是LZ说的这样实现的,在SingleSession的情况下,session的FlushModel是全Never的,不存在,自动转换成Auto的情况,也就不会再出现InvalidDataAccessApiUsageException异常
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics