我對JavaEE/JPA相當陌生,並且在我的項目中滿足了以下需求,這是我一直在尋找如何實現的需求,但迄今爲止尚未取得成功,所以我希望你們中的任何一位都能指出我的錯誤,希望能告訴我正確的解決方案是如何工作的,對我來說學習而不是僅僅複製一段工作代碼。來自EJB的事務控制
問題:
在我的豆,我有一個方法調用3種diferent JPA持久的方法(1堅持和2合併),但我保證,如果一個或多個的這些執着的方法失敗,我可以回滾整個交易,以避免進一步的問題。
那是什麼我的豆看起來像一個從頭開始:
@Stateless(mappedName = "FuncionarioBean")
@Remote(FuncionarioBeanRemote.class)
@TransactionManagement(TransactionManagementType.BEAN)//Was instructed to put this annotation, but I don't know the real impact of it in my application if it was set as a CONTAINER.
public class FuncionarioBean implements FuncionarioBeanRemote {
@PersistenceContext
private EntityManager em;
@Resource
private UserTransaction utx;
@Override
public void updateFuncionario(FuncionarioEntity funcionarioEditado) {
try{
utx.begin();
/* irrelevant code */
callJPAMergeMethod1();
/* irrelevant code */
callJPAMergeMethod2();
/* irrelevant code */
callJPACreateMethod1();
/* irrelevant code */
utx.commit();
} catch (Exception e) {
utx.rollback();
}
}
}
我設置要更新的內容之一/合併爲空(列是NOT NULL),以確保會有例外,但由於某些未知的原因(至少對我而言),沒有任何例外,並且其他方法一直在執行。如果我刪除UserTransaction方法並刪除註釋,則會拋出異常,但我無法回滾整個方法。
你們能告訴我我在做什麼錯嗎?
在此先感謝您的幫助。
最好的問候,
恩里科貝加莫。