如何处理hibernate中的异常?

时间:2011-04-02 10:41:50

标签: java hibernate jsp servlets

我正在使用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;
}

但我希望以更好的方式处理异常,以便向用户提供更好的信息,例如:当我在表格中有重复的密钥等时。

你们推荐什么?

祝你好运, Valter Henrique。

2 个答案:

答案 0 :(得分:2)

  • 无论你做什么,都不要吞下异常。在您的代码中,您永远不会知道异常是什么。所以重新抛出它/一个包装器。并将其记录在某处(可能不一定在上面的代码中)

  • 在Web层中创建一个通用异常处理程序 - 可能是Filter或404错误页面(并在web.xml中配置它)。无论异常如何,都向用户显示相同的消息。用户并不关心它是缺少列还是错误的数据类型。给他们一个很好的消息,你很抱歉,你会调查。

  • 还考虑了spring提供的声明式事务处理。

答案 1 :(得分:1)

您可以抛出自己的业务异常(可能是对您手头的问题有意义的RuntimeException层次结构),而不是返回true或false。

如何检测确切问题是另一个问题。您可以部署自己的异常转换器,这取决于SQLException将抛出适当的(特定于您的业务)异常。

请注意,对于这种特定方法,您最好先查询数据库中是否存在该键,然后抛出UserAlreadyExistsException(或其他内容)。