2011-04-02 56 views
4

我使用休眠,這看起來像在大多數的我的方法:如何在Hibernate中處理異常?

public boolean insertUser(User user) { 
    Session session = HibernateUtil.getSessionFactory().openSession(); 
    try { 
     session.beginTransaction(); 
     session.save(user); 
     session.getTransaction().commit(); 
    } catch (HibernateException he) { 
     session.getTransaction().rollback(); 
     return false; 
    } finally { 
     if (session != null) { 
      session.close(); 
     } 
    } 

    return true; 
} 

但我想治療以更好的方式的例外情況提供更好的信息給用戶,例如:當我在我的表中有一個重複的鍵,等等。

你們推薦什麼?

此致敬禮, 瓦爾特恩裏克。

回答

2
  • 無論你做什麼,都不要吞下異常。在你的代碼中,你永遠不會知道異常是什麼。所以重新推出它/一個包裝。並將其記錄在某處(可能不一定在上面的代碼中)

  • 在Web層中創建一個通用異常處理程序 - 可能是Filter或404錯誤頁(並在web.xml中配置它)。無論例外情況如何,向用戶顯示相同的信息。用戶並不在意它是否缺少列或錯誤的數據類型。給他們一個好消息,你很抱歉,你會調查。

  • 也考慮聲明式事務處理,如春季提供。

1

您可以拋出您自己的業務異常(可能是RuntimeException上的層次結構,這對您的問題有意義),而不是返回true或false。

如何檢測確切的問題是另一個問題。您可以推出您自己的異常轉換器,這取決於SQLException會拋出一個適當的(特定於您的業務)異常。

請注意,對於此特定的方法,您最好首先查詢數據庫的密鑰是否存在,然後拋出UserAlreadyExistsException(或其他)。