繁体   English   中英

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

[英]How can one explicitly commit a spring db transaction when using declarative transaction management?

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

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

如何才能做到这一点?

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

我尝试过的代码是:

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

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

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

试试这个不确定它是否可以正常工作,因为根据spring doc

交易

强烈建议您尽可能使用声明性方法进行回滚。 如果您绝对需要它,则可以使用程序化回滚,但是面对实现干净的基于POJO的体系结构时,它的用法就不那么理想了。

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

嵌套事务上面所seeked,可以使用REQUIRES_NEW传播史,但照顾自我调用的实现,说明这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM