2012-07-12 33 views
2

我正在使用Spring聲明性數據庫事務管理在我的java方法中使用@Transactional註釋。如何在使用聲明式事務管理時顯式提交spring db事務?

在一種情況下,我想在返回方法之前顯式提交當前事務(包裝當前正在執行的方法)。

這怎麼辦?

我已經嘗試從spring上下文中自動連接當前HibernateTransactionManager並使用它提交,但它不提交事務。

我已經嘗試的代碼是:

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

我*想*簡短的答案是你不能,但你能舉一個你爲什麼想要做的例子嗎?這可能有助於找出更好的解決方案 - 可能使用REQUIRES_NEW事務,或者刷新hibernate會話(如果您使用的是JPA,則爲entityManager)。 – MattR 2012-07-13 03:57:02

回答

1

我還沒有嘗試過,但你也許可以用一些技巧,我能想到的要做到這一點

的TransactionStatus使用TransactionAspectSupport.currentTransactionStatus得到() 注入事務管理器到你的bean(假設你正在使用休眠) 嘗試在事務管理器中調用doCommit(DefaultTransactionStatus狀態)。

嘗試了這一點不能肯定它會工作或沒有,因爲每個春天DOC

transaction

因爲我們強烈建議您如果在所有可能使用聲明的方式 回滾。如果您絕對需要 ,則可以使用程序化回滾,但它的使用會在實現基於POJO的乾淨架構時實現。

我還沒有測試過,但是如果您將setRollbackOnly設置爲TransactionStatus,它也可能完成這項工作。