gpt4 book ai didi

java - 在服务方法上使用@Transactional,更新多个存储库

转载 作者:行者123 更新时间:2023-12-05 07:08:58 26 4
gpt4 key购买 nike

Spring boot、postgres、spring jpa。

有一个服务,它试图跨多个存储库存储更改:

class Service {

@Transactional
public void doStuff() {
repo1.delete(...);
repo2.saveAll(...);
repo1.save(...);
}
}

此操作需要在任何失败时回滚。

在这里我想到了两件事:

  1. 如果我在该方法中间的某处添加一个throw RuntimeException,它之前的所有事情都不会回滚。
  2. 在常规流程中我得到

Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Error while committing the transaction

我的配置是:

@Configuration
@EnableTransactionManager
@EntityScan
@EnableJpaRepositories
public class DataConfig {}

还尝试将 TransactionTemplate bean 与它的 execute 方法一起使用。设法克服了第一个问题,但仍然无法解决第二个问题。

最佳答案

您可以尝试添加 @Transactional(rollbackFor = Exception.class) 即使您的代码中有异常,这也会回滚

class Service {

@Transactional(rollbackFor = Exception.class)
public void doStuff() {
repo1.delete(...);
repo2.saveAll(...);
repo1.save(...);
}
}

关于java - 在服务方法上使用@Transactional,更新多个存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61771749/

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