2012-12-03 28 views
1

每當用戶點擊刪除按鈕來刪除一些東西,我稱之爲捕獲異常的Seam提交

em.remove(entity) 

如果仍有借鑑約束這個實體,我看到被拋出PersistenceException下,我可以抓住它來注意到用戶。

但是,這只是我可以在代碼中看到的關係。例如:

A has an OneToMany relationship to B 

在一些特殊情況下,關係不反映在代碼中。例如:

Table A has a foreign key to Table B. But in code, there is no XtoX relationship between them 

在這些情況下,我無法捕獲上面提到的PersistenceException,這使得異常在屏幕上顯得非常難看。

我認爲在事務提交時出現異常。

是否有反正抓住它?

回答

2

在JPA中,em.flush()方法可以用來捕捉異常。完成此操作後,如果遇到問題,您將得到異常。

例如:

public void insert(Group group) { 
    try { 
     em.persist(group); 
     em.flush(); 
    } catch (PersistenceException pe) { 

    } 
} 
+0

謝謝。我怎麼錯過了它 –

0

我會考慮使用Seam的(2.x的)異常處理設施,讓您處理未捕獲的異常 - 例如打印錯誤消息和/或重定向到錯誤頁面 - 而不是可能爲此目的耦合與持久性相關的邏輯。即使您仍想刷新持久性上下文,這仍然可以爲您提供更多的錯誤處理實現方法。見exception handling in the Seam documentation。根據您的應用程序的需要,Seam ExceptionHandler類可以擴展用於進一步定製。見this related answer