【问题标题】:Spring data jpa with multiple entities not rolling back - PostgreSQL具有多个实体的 Spring data jpa 不回滚 - PostgreSQL
【发布时间】:2020-02-02 10:27:14
【问题描述】:

我在我的一个项目中使用 spring-data-jpa。在服务层,我用@Transactional 注释了一个私有方法,并在应用程序中启用了@EnableTransactionManagement。当实体的保存方法之一抛出异常时,之前保存的其余实体不会回滚。顺便说一句,我正在使用 PostgreSQL。

如果我在这里遗漏了什么,请告诉我。

【问题讨论】:

  • “私有方法”表示很可能是this is your problem。 (请注意,该解决方案已有十年历史,在细节上已经过时,但原理是一样的。)
  • @chrylis 将方法更改为公众工作。谢谢

标签: java spring postgresql transactions spring-data-jpa


【解决方案1】:

默认情况下,Spring 只会回滚运行时异常 (https://docs.spring.io/spring/docs/2.5.x/reference/transaction.html#transaction-declarative)。

如果您想回滚任何异常,您可以尝试添加:

@Transactional(rollbackFor = Exception.class)

【讨论】:

    【解决方案2】:

    Spring 事务仅适用于 public 方法。因为它需要使用代理类为事务注入代码。因此,公开您的方法将解决您的问题。查看proxy mechanism of spring 的文档。

    【讨论】:

      猜你喜欢
      • 2020-03-26
      • 2018-08-07
      • 2019-06-15
      • 1970-01-01
      • 2021-10-16
      • 2019-09-30
      • 1970-01-01
      • 2021-02-25
      • 1970-01-01
      相关资源
      最近更新 更多