我正在使用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";
}
答案 0 :(得分:0)
Nagendra。
RAS先生所说的是正确的。
例如,您持有100个实体,并且在第50个实体持久化中发生了异常。你有异常处理程序,它可以帮助你处理这种情况。它将跳过当前的一个并处理下一个。
需要注意的事项如下:
1-你的异常处理应该在循环内,希望你已经拥有它。
2-对于例外,您可以将实体保存在不同的列表中,以便进一步分析错误详细信息。在异常catch块中执行。
3-我不确定您是否使用交易管理器,交易需要小心。
-
答案 1 :(得分:0)
在第二种情况下,请删除该行...
entityManager.persist(温度);
你已经知道这会引发异常。将其保留在列表中以供进一步分析。最好放入任何队列(ActiveMQ)。
最佳解决方案是:
在持久化之前验证所有数据...以最小化异常。运行时事情需要再次重新处理,这应该是手动的。