簡體   English   中英

在服務方法上使用@Transactional,它會更新多個存儲庫

[英]Using @Transactional on service method, which updates multiple repositories

Spring 啟動,postgres,spring jpa。

有一個服務,它試圖跨多個存儲庫存儲更改:

class Service {

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

如果出現任何故障,則需要回滾此操作。

在這里,我想到了兩件事:

  1. 如果我在該方法中間的某處添加一個throw RuntimeException ,則它之前的所有內容都不會回滾。
  2. 在常規流程中,我得到

無法提交 JPA 事務; 嵌套異常是 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(...);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM