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

嵌套的@transaction(propagation.requires_new)在父@transaction失败时回滚

奚卓
2023-03-14

我有一个使用@transaction的方法调用一个使用@transaction(propagation.requires_new)的方法。在父方法中发生异常时,这两个事务都将回滚。

父事务:

@Transactional(propagation = Propagation.REQUIRED)
public void test() {
    SampleClassParent sampleClassParent = new SampleClassParent();
    sampleClassParent.setAddressId(2545L);
    sampleClassParent.setUserId(21660742L);
    getBaseDao().saveOrUpdate(sampleClassParent);
    newTransaction();

    // getting an exception purposefully
    User user = null;
    user.getId(); // Will throw a null pointer exception
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
private void newTransaction(){
    SampleClassNested sampleClassNested = new SampleClassNested();
    sampleClassNested.setCityId(15747L);
    sampleClassNested.setStoreId(5L);
    getBaseDao().saveOrUpdate(sampleClassNested);
}
  // Wrapper around hibernate method
  public void saveOrUpdate(Object entity, boolean delayCommit) {
      getSessionFactory().getCurrentSession().saveOrUpdate(entity);
  }

共有1个答案

吕皓
2023-03-14

从提供的代码来看,我认为这是因为您直接调用了方法newtransaction()。为了处理事务管理,您必须给容器一个机会来截获方法调用。这可以通过注入bean和从该注入点调用方法来实现,类似于bean.newtransaction()

 类似资料:
  • Spring Transactions Spring最可爱的地方之一就是AOP事务控制了,不多说。在SpringSide里,事务坐在Service层,而且因为Service层的方法里,只读的事务居多,因此在Class Level上默认设置@Transactional(readOnly = true),而在save,delete方法再注释@Transactional(readOnly = false

  • 我的项目遇到了Spring JPA事务无法回滚的问题。项目框架为spring MVC+spring+spring data JPA+Oracle。我在网上搜索了很多信息,但仍然不能解决我的问题。 我尝试了许多方法,例如将方法设置为public或在中添加,但仍然无法解决这个问题。 这是我的代码 控制器 服务 刀 我的方法加载我的实现类服务,它编写一个容易出错的1/0。我期望事务在出错后回滚,但它没有

  • 我很难理解如何决定使用Spring@Transaction注释什么方法。 在一次转账中,如果扣款失败,显然即使存款没有失败,也不应该继续存款。 在这五种方法(转移、扣除、存款、加载、保存)中,哪些方法应该用@transactional注释,为什么?

  • 定义用于发送事务和内联消息的API Transaction C API 定义用于发送事务的API Transaction CPP API 类型安全的Trasaction C API的C++封装 详细描述 A EOS.IO事务具有以下抽象结构: struct transaction { Name scope[]; Name readScope[]; message messages[

  • 数据库事务是一系列被视为单个工作单元的操作。 这些操作应该完全完成或根本不起作用。 事务管理是面向RDBMS的企业应用程序的重要组成部分,可确保数据的完整性和一致性。 交易的概念可以用以下描述为ACID四个关键属性来描述 - Atomicity - 事务应被视为单个操作单元,这意味着整个操作序列成功或不成功。 Consistency - 这表示数据库的参照完整性,表中的唯一主键等的一致性。 Iso

  • Commons Transaction 旨在提供一个轻量级、标准化、高效的 Java 事务多线程编程的工具包,实现了多级锁、事务集合和事务级文件访问。

  • 问题内容: 我想知道使用代替 使用 据我了解,即使发生了某些非常糟糕的事件,捕获也会帮助我们正确地进行行为。还是没有帮助? 问题答案: 据我了解,即使发生某些非常糟糕的事件,捕获错误也会帮助我们正确地执行操作。还是没有帮助? 你不需要显式指定,因为默认情况下,如果发生交易,spring会默认回滚事务。 请参见12.5.3回滚声明式事务 在默认配置中,Spring框架的事务基础结构代码仅在运行时,未

  • Transaction报表 主要功能 监控一段代码运行情况:运行次数、QPS、错误次数、失败率、响应时间统计(平均影响时间、Tp分位值)等等。 应用启动后默认会打点的部分: 打点 来源组件 描述 System cat-client 上报监控数据的打点信息 URL 需要接入cat-filter URL访问的打点信息 报表介绍 第一级分类(Type)统计界面 Type统计界面展示了一个Transact