簡體   English   中英

JavaEE EntityManager異常處理

[英]JavaEE EntityManager exception handling

我正在DAO上工作,無法弄清楚處理異常的最佳方法是什么。 使用.persist()時,可以發出3個異常:EntityExistsException / IllegalArgumentException / TransactionRequiredException。

我只是想知道捕獲和引發異常的最佳方法是什么(我想在更高層次上進行處理)。

我應該捕獲並拋出一個簡單的異常,還是單獨捕獲上述異常更有效?

第一種方法,我只是捕獲異常並將其拋出:

public void addAccount(final Account accountToAdd) throws AccountJpaException {

    try {
        em.persist(accountToAdd);
    } catch (Exception e) {
        throw new AccountJpaException(e);
    }

  }
}

第二種方法:我分別抓捕每個人

public void addAccount(final Account accountToAdd) throws AccountJpaException, AccountExistsException {

    try {
        em.persist(accountToAdd);
    } catch (EntityExistsException e) {
        throw new AccountExistsException(e);
    }catch(IllegalArgumentException e){
        throw new AccountJpaException(e);
    }catch(TransactionRequiredException e){
        throw new AccountJpaException(e);
    }

  }
}

感謝您的建議!

大多數N層應用程序在服務類上指定一些事務邊界。 在那里捕獲這些類型的異常並在這里引發用例特定的異常比將這種邏輯處理下推到DAO更為合適。

現在考慮兩個不同的服務類實現使用DAO方法。 可以想象它們解決了您的業務領域中的不同問題,因此要拋出的異常應該更加針對特定領域。

如果我們采用第二種方法,那么您將捕獲這些異常並從DAO中拋出一些超級通用異常,而僅是捕獲這些異常並在服務級別上重新拋出更細粒度的異常,這是過大的了。

我的經驗法則是在服務/域級別捕獲這些類型的案例,從那里傳播特定於域的異常,並根據需要在控制器中處理這些異常,也許是通過某些特定的錯誤處理程序,該異常處理程序根據異常顯示了適當的網頁視圖類型等

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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