【问题标题】:Exception in an MVC app and dealing with Hibernate ExceptionMVC 应用程序中的异常和处理 Hibernate 异常
【发布时间】:2014-08-27 10:09:13
【问题描述】:

我在带有 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 中捕获异常然后重新抛出它?是否应该向控制器重新抛出不同类型的异常?

【问题讨论】:

    标签: java hibernate


    【解决方案1】:

    HibernateException 封装了实际的根本原因,可以为您提供足够的信息来生成有意义的用户友好消息。阅读他们documentation 的异常处理部分。

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

    这意味着除了捕获异常以将其转换或将其包装为另一种异常之外,捕获异常对您没有帮助:使用 session after 无论如何都不会按预期工作。

    参考this

    【讨论】:

      猜你喜欢
      • 2012-05-08
      • 2018-03-20
      • 2011-10-08
      • 2017-12-14
      • 1970-01-01
      • 1970-01-01
      • 2014-11-02
      • 1970-01-01
      相关资源
      最近更新 更多