hibernate 中的 commit tran 异常

Exception in commit tran in hibernate

我在使用休眠时遇到问题。

for Loop
  begin tran
  select record
  insert record
  commit tran
  if exception, rollback tran
end

第一次出现时,我插入了一条外键值无效的记录,然后在提交事务时抛出异常。 第二次出现,我select记录或者插入正确的记录,抛出异常,属于第二次出现的异常。

由于for循环中的每次出现都没有依赖关系,因此,我想提交那些正确的记录,而只回滚那些无效的记录。我该怎么做?

试试下面的代码:

for (...) {
    Session s = sessionFactory.openSession();
    try {
        s.beginTransaction();
        // do work...
        s.getTransaction().commit();
    } finally {
        if ( ! s.getTransaction().isActive())
            try { s.getTransaction().rollback(); }
            catch (Exception ignored) {
                log.warn("Ignored rollback error", ignored); 
            }
        s.close();
    }
}

Session's javadoc 说:

If the Session throws an exception, the transaction must be rolled back and the session discarded. The internal state of the Session might not be consistent with the database after the exception occurs.

创建会话很便宜,只要确保正确配置连接池即可。如果你的工作单元非常小,可能值得测试这个场景,只有在异常发生后你才会打开新会话,否则就 clear() 它。