当前位置: 首页 > 知识库问答 >
问题:

Spring中异常时的事务回滚

慕佑运
2023-03-14
@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());
    }
}

非常感谢

共有1个答案

温成济
2023-03-14

如果您正在使用hibernate,请考虑以下场景。

当Repomember.save(A,B);执行时,hibernate会话还没有刷新会话(即执行save sql)util createMember()完成。当hibernate实际刷新并执行save sql时,就会发生此错误。这就是为什么您可能无法捕捉导致事务回滚的异常

以下是可能有帮助的链接http://hedleyproctor.com/2014/08/remonitable-hibernate-session-flashing/

 类似资料:
  • 这很好,但并不总是在代码中抛出运行时异常。因此,我挖掘并发现如下所示的rollbackFor; 现在,我必须更改所有代码,以使用RollBackfor更改@Transactional。但是还有其他方法可以将所有@transaction advice属性更改为rollbackFor=exception.class吗?

  • 我正在与用propagation.requires_new注释的方法的奇怪行为作斗争。 以下是TransactionManager的日志:

  • 我正在使用Spring“@Transactional”注释来处理事务。 但以防万一 insert1()-成功插入表A中的数据。 这些插入是ibatis内置函数,用于触发DB中的插入。我遇到了以下异常 事务不会回滚,即insert1(),insert2()不会回滚 请让我知道我错过了什么

  • 我使用的是Spring3.0.5和Hibernate3.6。在我的项目中,有一个场景,我必须回滚在抛出的任何异常或错误发生的事务。这是示例代码,除了当我抛出异常时事务不会回滚之外,一切都很好,但是如果抛出任何异常,比如mysql.IntegrityConstraintException,那么事务会回滚,为什么在我的情况下没有发生这种情况? hibernate.cfg 因此,正如我所说,我的问题是,

  • 我正在使用Spring JpaRepository在我的一个应用程序屏幕中实现CRUD。作为其中的一部分,我正在开发一个功能,用户可以保存所有汽车实体或没有(应该回滚)到数据库。我不确定如何使用Spring Boot、Spring Rest和Spring JPA实现此功能。 下面是我的源代码。 除此之外,我还得到了一个类似 请帮帮我。谢谢你。

  • 我在tomcat服务器中使用具有多个数据源配置的JTA原子事务。有时我会遇到以下异常: JTA事务意外回滚(可能是由于超时);嵌套的异常是javax。交易回滚异常:事务被设置为仅回滚 出现这种异常的原因是什么?