2013-06-20 47 views
2

我讀出了幾個問題,在這裏關於OptimisticLockException與JPA,在一個無狀態會話Bean使用。它被拋出,但不是我期望的地方。如何捕捉OptimisticLockException在JPA

這裏就是我期望能獲得異常的代碼:

  try 
      { 
       productFacade.edit(product); 
      } 
      catch(Exception { 
       return "lock"; 
      } 

productFacade與NetBeans的產生,這是一個本地接口的EJB,一個它實現了一個AbstractFacade抽象類。據我所知,這與JPA中的事務有關。由於異常的方法後,拋出此代碼段是留,edit()被稱爲不是之後。我應該在哪裏處理異常?

此外,我將需要以後的事務機制,因爲我將需要更新多個產品(或者如果某些被鎖定,則不需要更新)。我找到了一些代碼示例,但這讓我想知道如何處理事務?

+0

你可以添加更多的代碼,沒有任何相關的代碼顯示,如何管理事務,下一個方法在同一事務中執行等。 –

+0

我正在使用JTA和基於容器的事務。我嘗試切換到bean控制的事務並管理我自己的事務,但這並沒有真正的幫助。 如何檢查下一個方法在相同的事務中執行? –

+0

如前所述,使用相關代碼更新帖子,將有助於每個人。 –

回答

4

鎖錯誤不會被拋出,直到事務提交。所以你需要在SessionBean之外處理它,或者使用容器管理的事務。在您的JPA EntityManager,

或者,你可以只調用flush(),那麼錯誤將被拋出。

+0

我正在使用容器管理的事務。我在哪裏可以從客戶端的會話bean中捕獲異常? 對於容器管理的交易,交易何時實際開始和結束?如果我在一個方法中進行多次合併,那麼在方法結束後它們會被視爲一個事務嗎? –