0

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

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

尽管如此,我的应用程序后来在某个地方出现异常而终止。

(我做了这个检查是为了避免数据截断错误。可能有一种方法可以检查数据截断而不会在 Hibernate 中引起异常?)

4

1 回答 1

1

当引发 Hibernate 异常时,您将无法再使用导致该异常的会话。回滚是自动完成的。

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

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

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

通常你会做解决方案1。

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

于 2012-09-25T15:18:51.093 回答