2

我在我的 java 方法上使用 @Transactional 注释使用 Spring 声明性数据库事务管理。

在一种情况下,我想在方法返回之前显式提交当前事务(包装当前执行方法的事务)。

如何才能做到这一点?

我已经尝试从 spring 上下文中自动连接当前的 HibernateTransactionManager 并使用它来提交,但它没有提交事务。

我试过的代码是:

transactionManager.commit(transactionManager
  .getTransaction(new DefaultTransactionDefinition()));
4

2 回答 2

1

我还没有尝试过,但你可以用我能想到的一些技巧来做到这一点

使用 TransactionAspectSupport.currentTransactionStatus() 获取 TransactionStatus 将事务管理器注入到您的 bean(假设您正在使用休眠)尝试在事务管理器中调用 doCommit(DefaultTransactionStatus status)。

试试这个,不确定它是否会起作用,因为根据 spring doc

交易

如果可能,强烈建议您使用声明性方法进行回滚。如果您绝对需要,可以使用程序化回滚,但它的使用与实现干净的基于 POJO 的架构背道而驰。

我还没有测试过,但如果你将 setRollbackOnly 设置为 TransactionStatus 也可以完成这项工作。

于 2012-07-13T15:20:58.767 回答
0

上面寻求的嵌套事务可以使用 REQUIRES_NEW 传播来实现,但是通过照顾自我调用来实现,如此处所述

于 2018-06-05T21:09:59.043 回答