该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间: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事务就没有研究过了。 |
|
返回顶楼 | |
发表时间: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。 |
|
返回顶楼 | |
发表时间:2008-04-30
楼主谈到了一个很好的数据库session维护的方案,从技术上先赞一个!
但个人以为,这样的设计在提倡MVC分离过程中是不好的。我们可以在模型层获取足够的数据,而后关闭session的对话,将完整的model传输到view层,如果view层仍需要数据库支持,这里再次打开一个会话。这样做看似麻烦,但是保证了每个设计层面事务的封闭性。而且我们应该尽量争取在一次的session会话中获得足够的数据,这个是可以尝试的。 |
|
返回顶楼 | |
发表时间:2008-05-02
引用 servlet的session机制基于cookies,关闭浏览器的cookies则session失效即不能用网站的登录功能。 如果浏览器关闭了cookies功能,servlet可以使用jsessionid去得到当前的session,但这需要在servlet中多写点代码。如何在mvc框架中使用尚不知道。
没有看过seam如何解决open session in view的问题。 |
|
返回顶楼 | |
发表时间:2008-05-02
引用 我们可以大约了解的OpenSessionInViewFilter调用流程: request(请求)->open session并开始transaction->controller->View(Jsp)->结束transaction并 close session. OpenSessionInViewInterceptor的调用流程如何?类似?
|
|
返回顶楼 | |
发表时间:2008-07-30
内容上还是很好解释了open session in view , 还有jdbctransaction以及jta的区别。
但标题有些大, hibernate事务处理机制介绍得并不多,除了jdbctransaction和jta的一些比较就没有其他的了。 |
|
返回顶楼 | |
发表时间:2008-08-27
作者提到:在JTA上使用Hibernate 写JTA的Transaction代码,不要写Hibernate的Transaction代码,否则程序会报错;
但是我看了一下hibernate的jdbc transaction和JTA transaction实现,应该不存在楼主所说情况的。我们不需要在外面显式的调用session.close(),在transaction中应该做了这一件事了。 |
|
返回顶楼 | |
发表时间:2008-10-03
关注这个主题。
|
|
返回顶楼 | |
发表时间:2008-10-05
我觉得 就没怎么深入介绍 open session in view 从根本上是如何解决延迟加载带来的问题的。尤其是结合spring之后。
getHibernateTemplate(),又是怎么从当前线程中获取到session 然后怎么执行,怎么到页面 最后又怎么结束的 事务 |
|
返回顶楼 | |
发表时间:2008-11-14
内容有点老啊,spring 2.0.8中的OpenSessionInView就不是LZ说的这样实现的,在SingleSession的情况下,session的FlushModel是全Never的,不存在,自动转换成Auto的情况,也就不会再出现InvalidDataAccessApiUsageException异常
|
|
返回顶楼 | |