簡體   English   中英

使用聲明式事務管理時,如何顯式提交Spring db事務?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM