我正在学习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
。重新抛出Exception
在 catch 块中,它将起作用。检查文档交易性注解。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)