交易允许失败并继续

时间:2014-11-04 18:59:37

标签: java sql postgresql transactions rollback

我遇到了可以由用户配置的主要数据迁移问题,让我们说如下:

try {
    daoManager.beginTransaction();

    for (Entity node : nodeList) {

        boolean inserted;

        if (migrationConfig.canInsert()) {
            try {
                inserted = daoManager.getDaoEntity().insert(node);
            }
            catch(IndexDuplicityException ex) {
                inserted = false;
                //I want the transaction to continues when this Exceptions is
                //throwed
            }
        }

        if (migrationConfig.canUpdate() && !inserted) {
            modificoEntidad = daoManager.getDaoEntity().update(node);
        }
    }

    //Later

    if (//Business Logic) {
        throw new MustRollBackTransaction();
    }

    daoManager.commitTransaction();

} catch (MustRollBackTransaction ex) {
    daoManager.RollBack();
}

我的问题是,当抛出IndexDuplicityException时,将忽略任何未来的事务,给我这个异常

  

PSQLException:当前事务被中止,命令被忽略直到   交易结束块

有没有办法让我的交易允许失败的有效声明,而不是中止整个交易?

感谢。

1 个答案:

答案 0 :(得分:0)

尝试回滚事务并在IndexDuplicityException上启动一个新事务:

   }catch(IndexDuplicityException ex) {
    inserted = false;       
    daoManager.RollBack();
    daoManager.beginTransaction();
   }