Java @事务需要回滚除数据库中的一个存储之外的所有内容
我有一个方法:Java @事务需要回滚除数据库中的一个存储之外的所有内容,java,exception,rollback,java-annotations,Java,Exception,Rollback,Java Annotations,我有一个方法: @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()); }
@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
带有//保存值的代码。从createFile
调用createFileWorker
。如果这两个方法在同一个类中,例如,MyService
,则必须使用@Lazy
将代理的MyService
注入MyService
,并且必须通过此代理的Lazy实例调用createFileWorker
。createFileWorker
应该用@Transactional(传播=传播。需要\u NEW)
注释
防止自调用/代理问题的好方法,但2个服务仍然可以!?那不是黑客。您也可以使用非构造函数自动连接,但拥有两个服务将是更糟糕的解决方案。@wilx,谢谢您的解决方案。我试过了。但我还是无法挽救。它正在倒退
@Service
class MyService {
private MyService self;
public MyService(@Lazy MyService self) {
this.self = self;
}
@Transactional
void createFile() {
try {
self.createFileWorker()
} catch (Exception ex) {
this.repository.save(e.getMessage());
}
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
void createFileWorker() {
//code to save values
}
}