@Transactional 需要回滚除了数据库中的一个保存之外的所有内容

问题描述

我有一个方法

@Transactional
@Override
public void createFile(final String number) {
    try {
           //code to save values
           throw new Exception(number);
        } catch(Exception e){
             this.repository.save(e.getMessage());
     }
}

createFile方法中有很多数据库保存操作,发生错误时需要回滚。 Catch 需要将错误信息保存在表中。

如何在出现异常的情况下回滚整个事务但仍然这样做保存/更新 this.repository.save(e.getMessage());在数据库上?谁能帮我解决这个问题?提前致谢。

解决方法

我假设您使用的是 Spring。

将其拆分为两种方法。例如,createFile 带有调用另一个的 try-catch,例如 createFileWorker 带有 //code to save values。从 createFileWorker 呼叫 createFile。如果这两个方法在同一个类中,例如 MyService,则必须使用 @Lazy 将代理的 MyService 注入 MyService,并且必须调用 {{ 1}} 通过这个代理的惰性实例。 createFileWorker 应使用 createFileWorker 进行注释。

@Transactional(propagation=Propagation.REQUIRES_NEW)