我正在学习 Spring,我在 Spring 中遇到了一些事务问题。
这是我的代码
@Transactional(rollbackFor = Exception.class)
public void createGroupStudent(Student A,Student B,String nameGroup){
try{
//create Group
createGroup(nameGroup);
//createMember
createMember(A,B);
}catch(Exception e){
logger.error(e.getMessage());
}
}
@Transactional(rollbackFor = Exception.class)
public void createGroup(String nameGroup){
try{
repoGroup.save(nameGroup);
}catch(Exception e){
logger.error(e.getMessage());
}
}
@Transactional(rollbackFor = Exception.class)
public void createMember(Student A,Student B){
try{
// function will throw a kind of Exception involve to " error constraint sql oracle " .
//It's my intended
repoMember.save(A,B);
}catch(Exception e){
logger.error(e.getMessage());
}
}
问题是当函数 createMember()
抛出异常时,事务总是回滚,为什么?我不明白发生了什么事!我在每个方法中添加了 try、catch,但它没有用。
虽然方法 createMember()
在保存到数据库时遇到了问题(我在这里使用函数 saveAndFlush()
)。我知道它并且我捕获了那个异常。父事务createGroupStudent()
认为自己没有问题,提交事务。但是当再次提交时,方法 createMember()
将中断并抛出异常。我认为方法 createGroup()
不会回滚。但实际上,那个函数回滚了,所有的交易都回滚了?发生了什么事?
我正在使用 atomikos 交易。
非常感谢
最佳答案
如果任何方法抛出Exception
,事务将回滚。但是这些方法都没有抛出 Exception
。在 catch block 中重新抛出 Exception
,它将起作用。查看 Transactional 的文档注释。
关于java - Spring异常时事务回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36759599/