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

处理异常后的Spring嵌套事务回滚

荣俊杰
2023-03-14

我有一个@service类,它有一个@transactional方法,该方法调用另一个服务上的另一个@transaction方法。大概是这样的:

@Service
public class AService {
  @Autowired
  BService b;
  @Autowired
  ARepository aRepo;

  @Transactional
  public void methodOne(){
    try{
      b.methodTwo();
    }catch(RuntimeException e){}
    aRepo.save(new A());
  }

} 

@Service
public class BService{

    @Transactional
    public void methodTwo(){
      if(true)
        throw new RuntimeException();
    }

}

我预计一个实体将被插入,但是如果任何嵌套事务抛出异常插入将拒绝,即使这个异常也是在aservice.methodOne()处理的。

我可以用@transactional(propagation=propagation.requires_new)注释methodtwo()。但它会胜过表演。

共有1个答案

宗穆冉
2023-03-14

如果在methodtwo中发生异常后不想从methodone回滚事务,可以用@transactional(noRollbackFor={runtimeexception.class})添加注释methodone。但请注意,这是一个有点滑坡,如果你真的想做的话,三思而后行。

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

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

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

  • 本文向大家介绍Java异常处理中的嵌套try块,包括了Java异常处理中的嵌套try块的使用技巧和注意事项,需要的朋友参考一下 顾名思义,try块中的try块在Java中称为嵌套try块。当不同的块(例如外部和内部)可能导致不同的错误时,就需要这样做。要处理它们,我们需要嵌套的try块。 现在让我们看一个实现嵌套try块的示例- 示例 输出结果 现在我们将在上面的示例中进行一些更改- 示例 输出结

  • 问题内容: 我在下面使用HIbernate和Spring和JPA。当引发PersistenceException时,我想捕获它并返回错误消息,以便它不会传播到调用者。 但是我得到一个异常,说我需要在异常之后回滚事务,但是当我捕获到异常并且不想重新抛出该异常时,如何回滚它呢? 问题答案: 似乎没有办法回退由Spring ORM管理的失败事务。问题中显示的代码是服务类。将其持久性例程提取到单独的DAO