hibernate中commit tran中的异常

hibernate中commit tran中的异常,hibernate,exception,transactions,commit,Hibernate,Exception,Transactions,Commit,我在使用hibernate时遇到问题 for Loop begin tran select record insert record commit tran if exception, rollback tran end 在第一次出现时,我插入一个外键值无效的记录,然后在提交事务时抛出异常。 在第二次出现时,无论我选择记录还是插入正确的记录,它都会抛出异常,该异常属于第二次出现 由于for循环中的每个事件都没有依赖关系,因此,我希望提交那些正确的记录,并回滚那些无效的记录。

我在使用hibernate时遇到问题

for Loop
  begin tran
  select record
  insert record
  commit tran
  if exception, rollback tran
end
在第一次出现时,我插入一个外键值无效的记录,然后在提交事务时抛出异常。 在第二次出现时,无论我选择记录还是插入正确的记录,它都会抛出异常,该异常属于第二次出现


由于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();
    }
}
报告说:

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

创建会话很便宜,只需确保正确配置了连接池。如果您的工作单元非常小,那么可能值得测试该场景,即您将仅在异常之后打开新会话,否则只打开它