【发布时间】:2021-02-22 04:53:10
【问题描述】:
@Service
public class TransactionClass{
@AutoWire
TransactionClass tranClass;
@Autowire
TransactionRepository transRepo;
public void methodA(Data data){
try{
methodB(data)
}catch(Exception e){
//some logic
}
}
public void methodB(Data data){
//some logic
tranClass.methodC(data)
}
@Transactional
public void methodC(Data data){
//some logic
transRepo.save(data);
throw new RuntimeException();
}
}
问题是即使抛出未经检查的异常,methodC() 也没有回滚。
【问题讨论】:
-
因为
methodC()没有进行中的事务,如欺骗中所述。唯一的交易将发生在transRepo.save(data);。 -
但我只想在methodC中发生回滚。但即使在 transRepo.save(data); 之后抛出运行时异常;仍然数据保存在数据库中。
-
哦,我没有注意到您正在为
TransactionClass进行自我注入。这就是它通常应该如何工作,所以错误可能在你的实际代码中的某个地方。 -
怎么调用methodC?
-
@Mick
methodC()使用TransactionClass的引用来调用。
标签: java spring jpa exception transactions