首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用声明性事务管理时,如何显式地提交spring db事务?

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

Stack Overflow用户
提问于 2012-07-13 06:18:14
回答 2查看 4.6K关注 0票数 2

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

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

如何做到这一点?

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

我尝试过的代码是:

代码语言:javascript
复制
transactionManager.commit(transactionManager
  .getTransaction(new DefaultTransactionDefinition()));
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-13 23:20:59

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

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

尝试一下,不确定它能不能工作,因为根据spring文档

transaction

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

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

票数 1
EN

Stack Overflow用户

发布于 2018-06-06 05:09:59

正如here所解释的那样,上面查找的嵌套事务可以使用REQUIRES_NEW传播来实现,但需要注意自调用

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11461554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档