2014-08-27 107 views
1

我已經與Spring和Hibernate的MVC應用程序下面的控制器:異常在MVC應用程序和處理與Hibernate異常

@RequestMapping(value = { "/mypage"}, method = RequestMethod.POST) 
public ModelAndView showPage(Model model, HttpServletRequest request) { 

    ModelAndView mv = new ModelAndView(); 

    try { 

     // Here I call a Service and then a DAO, where I can get HibernateException 

    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 

    mv.setViewName("mypage"); 
    return mv; 

我不知道該異常正確這裏處理。

首先:

  • 我不拋出任何checked異常(HibernateException的也選中)。
  • 但是我需要捕捉所有的異常,因爲我想用通知錯誤(而不是錯誤頁面)反正向用戶展示相同的頁面。
  • 在我的DAO中,我沒有捕捉或重新引發任何異常。

我的問題是:

  • 是否精細捕捉及處理這樣的例外?
  • 我是否也應該在控制器中分別捕獲HibernateException?
  • 我應該做的不僅僅是記錄?
  • 我是否也應該捕捉到DAO中的異常,然後重新拋出它?應該向控制器重新引發不同類型的異常?

回答

0

HibernateException的封裝實際的根本原因不是可以爲您提供足夠的信息讓你產生有意義的用戶友好的消息。閱讀其documentation的異常處理部分。

如果Session拋出異常,包括任何的SQLException, 立即回滾數據庫事務,調用Session.close() ,丟棄該Session實例。會話的某些方法不會 使會話保持一致狀態。 沒有拋出異常Hibernate可以被視爲可恢復。

這意味着除了捕捉異常以轉換它或將其包裝爲另一種異常之外,捕捉該異常並不會幫助您:使用會話之後無法按預期工作。

參考this