【问题标题】:Is it possible to complete transaction after throwing and start new one in Controller?在Controller中抛出并开始新的事务后是否可以完成事务?
【发布时间】:2012-06-17 20:28:38
【问题描述】:

我有一个标有事务注释的控制器。方法 join 可能会抛出异常,我在 @ExceptionHandler 注释的帮助下通过方法 handle 处理。

public String join(Model uiModel) {
  ... here exception occures
}

@ExceptionHandler(BalanceException.class)
public String handle() {
    return "someView";
} 

handle 方法返回视图名称时,一切正常。不幸的是,我需要重定向到另一个需要事务的控制器。

是否可以完成这笔交易并开始新的交易?

【问题讨论】:

  • 如果这是纯 SQL,您可以使用“检查点”。看起来 Spring 不支持检查点:static.springsource.org/spring/docs/2.0.7/reference/…
  • @paulsm4 这是 2.0.x 版本。 Spring 目前是 3.1.x 版本,所以你可能会检查一个更新的版本(这些是 5 岁)

标签: spring spring-mvc jta spring-transactions


【解决方案1】:

在我看来,您永远不应该在视图层中启动事务,而应使用服务层来处理事务逻辑。这意味着您应该在服务层中的 Spring bean 上使用 @Transactional 注释。

【讨论】:

  • 虽然这是真的,但它并不能帮助 OP 解决问题:从请求中获取事务以重定向。
猜你喜欢
  • 1970-01-01
  • 2012-02-08
  • 1970-01-01
  • 1970-01-01
  • 2011-08-06
  • 2016-02-05
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
相关资源
最近更新 更多