我需要以某种方式清除Hibernate异常吗?

时间:2012-09-25 14:18:13

标签: java hibernate exception transactions

我在以下列方式保存数据时进行异常检查:

    try {
        session.beginTransaction();
        session.update(person);
        session.getTransaction().commit();
    }
    catch(Exception e) {
        session.getTransaction().rollback();
        log.error("Error saving person to database", e);
    }

尽管如此,我的应用程序在稍后的某个地方以异常终止。

(我做了这个检查是为了避免数据截断错误。可能有办法检查数据截断而不会在Hibernate中导致异常吗?)

1 个答案:

答案 0 :(得分:1)

当抛出Hibernate异常时,您不能再使用会导致异常的会话。回滚是自动完成的。

如果您想在异常后继续,您有两种可能性:

  1. 丢弃旧会话并创建一个新会话。

  2. 使用StatelessSession而不是会话。可以在异常后使用StatelessSession。在StatelessSession中,您必须手动执行回滚。

  3. 通常你会做解决方案1.

    解决方案2.如果您故意挑起异常并且有特殊的方式对其做出反应,那么它非常有用。 (例如,插入操作中的索引违例异常,并且在异常之后执行更新而不是插入。)