java - Spring异常时事务回滚

标签 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
        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/

相关文章:

java - Guava 的 Optional.or() 的预期行为是什么?

java - 在 spring security 中从 userDetails 中排除 GrantedAuthority

java - JwtBuilder 类的 @autowired 不起作用,错误 : required a bean of type 'io.jsonwebtoken.JwtBuilder' that could not be found

node.js - MongoDB,网上没有关于事务和读操作交互的信息

java - 在 Android 的 MVP 设计模式中,我们在哪里放置业务登录?

java - Java 8 日期/时间 API 中的持续时间类

java - 在 Java 类中使用接口(interface)

java - 使用 java spring 应用程序进行 SAP RFC 调用

javascript - 如何在事务中创建 IndexedDb 存储?

javascript - firebase 交易减少值