如何在发生异常时继续批量插入

时间:2012-10-30 12:43:43

标签: java hibernate exception jpa try-catch

我正在使用jpa和hibernate我想在数据库中插入100条记录,假设我在第50条记录插入时得到异常JDBC批量更新我需要处理异常,我需要将剩余记录保存到DB。

代码:

 private List<TempCustomers> tempCustomer =new ArrayList<TempCustomers>();

    public String migrateCustomers() {

      TempCustomers temp = null;
        for(DoTempCustomers tempCustomers:doTempCustomers){

              try {
                temp=new TempCustomers();
                BeanUtils.copyProperties(temp, tempCustomers);
                        tempCustomer.add(temp);
                    entityManager.persist(temp);


              }catch (Exception e) {
                  tempCustomer.add(temp);
                  entityManager.persist(temp);
                  log.info("Exception ..."+e);
                  return "null";
              }
        }


        return "null";
    }

2 个答案:

答案 0 :(得分:0)

Nagendra。

RAS先生所说的是正确的。

例如,您持有100个实体,并且在第50个实体持久化中发生了异常。你有异常处理程序,它可以帮助你处理这种情况。它将跳过当前的一个并处理下一个。

需要注意的事项如下:

1-你的异常处理应该在循环内,希望你已经拥有它。

2-对于例外,您可以将实体保存在不同的列表中,以便进一步分析错误详细信息。在异常catch块中执行。

3-我不确定您是否使用交易管理器,交易需要小心。

-

答案 1 :(得分:0)

在第二种情况下,请删除该行...

entityManager.persist(温度);

你已经知道这会引发异常。将其保留在列表中以供进一步分析。最好放入任何队列(ActiveMQ)。

最佳解决方案是:

在持久化之前验证所有数据...以最小化异常。运行时事情需要再次重新处理,这应该是手动的。