gpt4 book ai didi

hibernate - "Transaction in view"与 Hibernate、Spring、Struts

转载 作者:行者123 更新时间:2023-12-01 15:58:55 27 4
gpt4 key购买 nike

来自 Hibernate 引用手册:“使用单个数据库事务来满足客户请求,在打开和关闭 session 时启动并提交它”

Spring 支持这种模式吗?我一直在使用带有 @Transactional 注释和“在 View 中打开 session ”模式 (org.springframework.orm.hibernate3.support.OpenSessionInViewFilter) 的 Spring 事务支持,但事务必须限于服务方法,所以我得到多个事务每个 View ,而不仅仅是一个。

最佳答案

您可能不想要 View 中的事务类型的功能。通常在请求中发生的是

  1. 请求进来
  2. 调用一些将内容保存到数据库的操作
  3. 响应消失。即呈现成功页面或返回 json 或其他内容

您不希望“ View 中的事务”的原因是,如果在第 3 步出现错误,您的事务将被回滚,即使实际业务逻辑是成功的,只是呈现响应失败。

现在,我已经做了一个假设,即使你提交后有错误,你也希望数据被提交。如果这个假设是错误的,那么好吧,这取决于你。

由于服务方法包含在事务中,也许解决问题的更简单方法是重构代码,以便为每个传入请求调用一个服务。通常这被称为“外观模式”。假设你有

Service1.op1()
Service2.op2()

然后您为一个请求调用这两种方法。您可以简单地创建另一个服务

AppFacade.doOp1andOp2()

在相关服务上调用 op1 和 op2。

另一种可能性是将 Spring 配置为使用声明式事务管理围绕您的 Struts Actions 放置事务。请注意事务,从 tx 打开到关闭,所有数据库操作都将使用相同的事务,因此即使您调用多个服务,它们也都使用相同的 tx.=。请参阅此处的文档: http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/transaction.html

特别是 10.5.2

但我认为每个业务功能单元使用一个服务调用是最好的方法。

关于hibernate - "Transaction in view"与 Hibernate、Spring、Struts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4759709/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com