视图中的Hibernate Open Session:每个请求的交易量?

视图中的Hibernate Open Session:每个请求的交易量?,第1张

视图中的Hibernate Open Session:每个请求的交易量?

您的担忧是正确的,Wiki页面上提供的解决方案过于简单。交易不应在Web层进行管理-交易应在服务层进行。

正确的实现将打开一个会话并将其绑定到过滤器中的线程。没有事务开始。会话进入刷新模式永不-
只读模式。服务调用会将会话设置为自动刷新模式并启动/提交事务。服务方法完成后,会话刷新模式将恢复为从不。

还有一个选项可以不打开过滤器中的会话。每个服务层调用都会打开一个单独的会话和事务-
在完成服务调用后,会话不会关闭,但会注册为延迟关闭。Web请求处理完成后,会话将关闭。

Spring提供了如上所述的OpensessionInViewFilter。因此,请忽略jboss
Wiki文章,仅配置OpensessionInViewFilter-一切都会好起来。

SessionFactory.getCurrentSession()-在内部创建会话并将其分配给本地线程。每个请求/线程都会有自己的会话。Web请求处理完成后,会话将关闭。从代码中,您只需要使用SessionFactory.getCurrentSession()即可,而不必关闭它。jboss
Wiki页面上的代码示例是错误的-
在finally块中应该有一个SessionFactory.getCurrentSession()。close()。或者他们可能正在使用JTA事务,并且将hibernate配置为与JTA事务一起打开/关闭会话。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5124876.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-17
下一篇 2022-11-17

发表评论

登录后才能评论

评论列表(0条)

保存