[英]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.