我使用Spring声明式数据库事务管理,在我的java方法上使用@ transaction注解。
在一种情况下,我希望在方法返回之前显式提交当前事务(包装当前正在执行的方法的事务)。
如何做到这一点?
我已经尝试从spring上下文自动连接当前的HibernateTransactionManager并使用它来提交,但是它没有提交事务。
我尝试过的代码是:
transactionManager.commit(transactionManager
.getTransaction(new DefaultTransactionDefinition()));发布于 2012-07-13 23:20:59
我没有试过,但你也许可以用一些我能想到的技巧来做到这一点。
使用TransactionAspectSupport.currentTransactionStatus()获取状态将事务管理器注入到您的bean中(假设您正在使用hibernate),尝试在事务管理器中调用doCommit(DefaultTransactionStatus状态)。
尝试一下,不确定它能不能工作,因为根据spring文档
transaction
强烈建议您尽可能使用声明性方法进行回滚。如果你绝对需要的话,程序化的回滚是可用的,但它的使用与实现一个干净的基于POJO的架构是背道而驰的。
我还没有测试过,但是如果您将setRollbackOnly设置为TransactionStatus,也可以完成这项工作。
发布于 2018-06-06 05:09:59
正如here所解释的那样,上面查找的嵌套事务可以使用REQUIRES_NEW传播来实现,但需要注意自调用
https://stackoverflow.com/questions/11461554
复制相似问题