在使用声明式事务管理时,如何显式提交spring db事务?

时间:2012-07-12 22:18:14

标签: java database spring hibernate spring-transactions

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

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

如何做到这一点?

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

我尝试的代码是:

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

2 个答案:

答案 0 :(得分:1)

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

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

尝试这一点,不确定它是否会起作用,因为按照春季文档

transaction

  

强烈建议您使用声明式方法   尽可能回滚。程序化回滚应该可用   你绝对需要它,但它的使用在面对实现一个   清洁基于POJO的架构。

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

答案 1 :(得分:0)

上面要搜索的嵌套事务可以使用REQUIRES_NEW传播实现,但是通过自我调用来实现,如here所述

相关问题