Java Spring中出现异常时事务回滚

Java Spring中出现异常时事务回滚,java,spring,transactions,commit,rollback,Java,Spring,Transactions,Commit,Rollback,我正在学习Spring,在Spring的交易中遇到了一些麻烦 这是我的密码 @Transactional(rollbackFor = Exception.class) public void createGroupStudent(Student A,Student B,String nameGroup){ try{ //create Group createGroup(nameGroup); //createMember c

我正在学习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事务


非常感谢

如果任何方法抛出
异常
,事务将回滚。但是没有一个方法抛出异常。在catch块中重新显示
异常
,它将起作用。请检查文档中的注释。

如果您使用的是hibernate,请考虑这种情况

当重新生成成员时。保存(A、B);执行时,hibernate会话尚未刷新会话(即,执行保存sql)util createMember()完成。当hibernate实际刷新并执行save sql时,就会发生该错误。这就是为什么您可能无法捕获导致事务回滚的异常

下面是一个可能有用的链接

谢谢。但当我发现任何异常时。事务仍然回滚吗?我不明白@。你是如何检查事务是否回滚的?可能是事务未提交。检查您的配置。我认为,尽管方法createMember()在保存到数据库时有问题(这里我使用的是函数“saveAndFlush()”)。我知道这一点,我抓住了这个例外。Prarent transaction createGroupStudent()认为自己没有问题并提交事务。但当再次提交时,方法createMember()将中断并引发异常。我认为方法createGroup()不会回滚。但实际上,该函数是回滚的,所有事务都是回滚的?发生了什么事。这是我的问题:(.我正在使用atomikos Transaction,您会遇到什么异常?能否将“传播”设置为“必需”,然后重试?