在hibernate中的commit tran中有异常

时间:2015-03-12 01:35:28

标签: hibernate exception transactions commit

使用休眠时遇到问题。

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

在第一次出现时,我插入一个带有无效外键值的记录,然后在提交事务时抛出异常。 在第二次出现时,无论是选择记录还是插入正确的记录,它都会抛出异常,异常属于第二次出现。

因为for循环中的每次出现都没有依赖关系,所以,我想提交那些正确的记录,然后回滚那些无效的记录。我该怎么做?

1 个答案:

答案 0 :(得分:0)

请尝试以下代码:

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说:

  

如果Session抛出异常,则必须滚动事务   返回,会话被丢弃。会话的内部状态   发生异常后,可能与数据库不一致。

创建会话很便宜,只需确保正确配置连接池即可。如果您的工作单位非常小,那么测试该方案可能是值得的,您只能在异常后打开新会话,否则只需clear()