Java 如何忽略休眠错误并继续插入数据?

Java 如何忽略休眠错误并继续插入数据?,java,hibernate,Java,Hibernate,我的DAO类中有一些方法: public void insertAVAYAcmCDRs(List<AvayaCmCdr> cdrList) { AvayaCmCdr aCdrList1 = null; try { em.getTransaction().begin(); for (AvayaCmCdr aCdrList : cdrList) { aCdrList1 = aC

我的DAO类中有一些方法:

public void insertAVAYAcmCDRs(List<AvayaCmCdr> cdrList) {
        AvayaCmCdr aCdrList1 = null;
        try {
            em.getTransaction().begin();
            for (AvayaCmCdr aCdrList : cdrList) {
                aCdrList1 = aCdrList;
                em.persist(aCdrList);
            }
            em.getTransaction().commit();
            em.clear();
        } catch (Exception e) {
            logger.log(Level.INFO, "Exception in  task time={0}. Exception message = {1}.", new Object[]{aCdrList1.getDate(), e.getMessage()});
        }
    }
我在循环的2步中得到这个错误。我打印了这个对象,在DB中找到了dublicate

我希望忽略此错误并继续插入数据或以某种方式处理此错误


如果该行已经在数据库中,我希望忽略并跳过它并继续插入

为什么要分配此aCdrList1=aCdrList?有什么具体原因吗? 您可以保存aCdrList对象。使用低于1

em.saveOrUpdate(aCdrList);


这个错误是不言自明的:Hibernate被告知要持久化一个对象,该对象的id值已经在同一会话中的另一个对象上看到。您能修改您的业务逻辑以避免这种情况发生吗?当您说“但在DB中我有uniqe索引-它不允许插入重复的行。它在DB端正常工作,但在java中有一些错误。”您的意思是什么?如果DB有一个唯一的约束,那么它将不允许您从Java或其他方面违反它。我只想跳过它们,继续插入剩余的rows@Tim当我插入时,Biegeleisen所有我的对象的id都为0。在DB中,我将autoincrement设置为这个列
em.saveOrUpdate(aCdrList);
em.merge(aCdrList);