MVC应用程序中的异常并处理Hibernate异常

时间:2014-08-27 10:09:14

标签: java hibernate

我在Spring和Hibernate的MVC应用程序中有以下控制器:

@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;

我不确定这里是否正确处理了异常。

首先:

  • 我没有抛出任何已检查的异常(HibernateException也未选中)。
  • 但是我需要捕获所有异常,因为我想向用户显示相同的页面,但是通知错误(而不是错误页面)。
  • 在我的DAO中,我没有抓住或重新提出任何例外情况。

我的问题是:

  • 以这种方式捕获和处理异常是否可以?
  • 我是否还应该在控制器中单独捕获HibernateException?
  • 我应该做的不仅仅是记录吗?
  • 我是否还应该在DAO中捕获异常然后重新抛出它?应该为控制器重新抛出不同类型的异常吗?

1 个答案:

答案 0 :(得分:0)

HibernateException 封装了实际的根本原因,而不是为您提供足够的信息来生成有意义的用户友好消息。阅读documentation

的“异常处理”部分
  

如果Session抛出异常,包括任何SQLException,   立即回滚数据库事务,调用Session.close()   并丢弃Session实例。 Session的某些方法不会   使会话保持一致状态。没有例外   Hibernate可以被视为可恢复的。

这意味着除了捕获异常以进行转换或将其包装到另一种异常中之外,捕获异常对您无效:使用会话后无论如何都无法正常工作。

参考this