使用休眠时遇到问题。
for Loop
begin tran
select record
insert record
commit tran
if exception, rollback tran
end
在第一次出现时,我插入一个带有无效外键值的记录,然后在提交事务时抛出异常。 在第二次出现时,无论是选择记录还是插入正确的记录,它都会抛出异常,异常属于第二次出现。
因为for循环中的每次出现都没有依赖关系,所以,我想提交那些正确的记录,然后回滚那些无效的记录。我该怎么做?
答案 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抛出异常,则必须滚动事务 返回,会话被丢弃。会话的内部状态 发生异常后,可能与数据库不一致。
创建会话很便宜,只需确保正确配置连接池即可。如果您的工作单位非常小,那么测试该方案可能是值得的,您只能在异常后打开新会话,否则只需clear()
。