Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用声明性事务管理时,如何显式提交spring db事务?_Java_Database_Spring_Hibernate_Spring Transactions - Fatal编程技术网

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

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

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

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

如何做到这一点

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

我尝试过的代码是:

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

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

使用TransactionSpectSupport.currentTransactionStatus()获取TransactionStatus 将事务管理器注入bean(假设您使用的是hibernate) 尝试在事务管理器中调用doCommit(DefaultTransactionStatus状态)

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

强烈建议您使用声明性方法来 尽可能回滚。如果需要,程序回滚是可用的 您绝对需要它,但它的使用面临着实现 干净的基于POJO的体系结构


我还没有测试,但是如果您将setRollbackOnly设置为TransactionStatus,则可能也会执行此操作

上面提到的嵌套事务可以使用REQUIRES_NEW propogation实现,但是要注意自我调用,正如前面解释的那样

我认为简单的答案是你不能,但是你能举个例子说明你为什么要这样做吗?这可能有助于确定更好的解决方案——可能使用新事务,或者刷新hibernate会话(如果使用JPA,则使用entityManager)。