Java 使用声明性事务管理时,如何显式提交spring db事务?
我在java方法上使用@Transactional注释使用Spring声明性数据库事务管理 在一种情况下,我希望在方法返回之前显式提交当前事务(包装当前正在执行的方法的事务) 如何做到这一点 我尝试过从spring上下文自动连接当前的HibernateTransactionManager并使用它来提交,但它没有提交事务 我尝试过的代码是:Java 使用声明性事务管理时,如何显式提交spring db事务?,java,database,spring,hibernate,spring-transactions,Java,Database,Spring,Hibernate,Spring Transactions,我在java方法上使用@Transactional注释使用Spring声明性数据库事务管理 在一种情况下,我希望在方法返回之前显式提交当前事务(包装当前正在执行的方法的事务) 如何做到这一点 我尝试过从spring上下文自动连接当前的HibernateTransactionManager并使用它来提交,但它没有提交事务 我尝试过的代码是: transactionManager.commit(transactionManager .getTransaction(new DefaultTrans
transactionManager.commit(transactionManager
.getTransaction(new DefaultTransactionDefinition()));
我还没试过,但你可以用我能想到的一些技巧来做到这一点 使用TransactionSpectSupport.currentTransactionStatus()获取TransactionStatus 将事务管理器注入bean(假设您使用的是hibernate) 尝试在事务管理器中调用doCommit(DefaultTransactionStatus状态) 尝试一下,不确定它是否会工作,因为根据spring文档 强烈建议您使用声明性方法来 尽可能回滚。如果需要,程序回滚是可用的 您绝对需要它,但它的使用面临着实现 干净的基于POJO的体系结构
我还没有测试,但是如果您将setRollbackOnly设置为TransactionStatus,则可能也会执行此操作 上面提到的嵌套事务可以使用REQUIRES_NEW propogation实现,但是要注意自我调用,正如前面解释的那样我认为简单的答案是你不能,但是你能举个例子说明你为什么要这样做吗?这可能有助于确定更好的解决方案——可能使用新事务,或者刷新hibernate会话(如果使用JPA,则使用entityManager)。