问题描述
@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)