因此,我在OpenEJB和Hibernate中使用容器管理的事務,並且我嘗試使用相當簡單的事務回滾場景。我的DBMS是MySQL。休眠的EJB事務回滾
我從一個無狀態EJB開始,該無狀態EJB具有執行一些基本實體操作/創建的默認事務傳播(必需)。
我也有第二個無狀態的EJB,它有一個指定傳播的註釋(但它仍然是'必需的')。從第二個EJB方法中,我調用了第一個EJB的方法來完成基本的實體操作/創建。我找回了一個還沒有ID的實體,所以我調用了entityManager.flush(),它爲我提供了一個ID來處理從第一個EJB返回的實體。
這是我遇到問題的地方。第二個EJB現在有一個問題,無論是系統異常還是某種異常。我想強制回滾,所以這個EJB有一個@Resource SessionContext ctx成員,我用它來調用ctx.setRollbackOnly()。
這是我在日誌中看到:
DEBUG - TX要求:開始交易[email protected]
....東西最終堆棧跟蹤我登錄....
DEBUG - TX要求:在交易使用setRollbackOnly()[email protected]
DEBUG - TX要求:回滾事務[email protected]
但是,當我檢查數據庫,從第一個EJB的變化還是在數據庫中。我錯過了什麼?
這正是我的問題。謝謝!對於任何想從馬的嘴巴聽到它的人:http://forums.mysql.com/read.php?21,68686,68686 – lakemalcom