我在我的java方法上使用@Transactional注释使用Spring声明式数据库事务管理。
在一种情况下,我想在返回方法之前显式提交当前事务(包装当前正在执行的方法的事务)。
如何做到这一点?
我尝试从spring上下文自动连接当前的HibernateTransactionManager并使用它来提交,但它不提交事务。
我尝试的代码是:
transactionManager.commit(transactionManager
.getTransaction(new DefaultTransactionDefinition()));
答案 0 :(得分:1)
我没有尝试,但你可以用一些我能想到的技巧来做到这一点
使用TransactionAspectSupport.currentTransactionStatus()获取TransactionStatus 将事务管理器注入您的bean(假设您正在使用hibernate) 尝试在事务管理器中调用doCommit(DefaultTransactionStatus status)。
尝试这一点,不确定它是否会起作用,因为按照春季文档
强烈建议您使用声明式方法 尽可能回滚。程序化回滚应该可用 你绝对需要它,但它的使用在面对实现一个 清洁基于POJO的架构。
我还没有测试,但是如果你将setRollbackOnly设置为也可以完成工作的TransactionStatus。
答案 1 :(得分:0)
上面要搜索的嵌套事务可以使用REQUIRES_NEW传播实现,但是通过自我调用来实现,如here所述