我正在学习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事务。
非常感谢