【发布时间】:2016-08-14 01:32:43
【问题描述】:
我正在学习 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 交易。
非常感谢
【问题讨论】:
标签: java spring transactions commit rollback