Spring / Hibernate-忽略重复的条目并继续插入

时间:2018-10-06 15:07:41

标签: java spring hibernate spring-boot

我正在Spring Boot环境中开发应用程序,并且正在使用Hibernate持久化数据。在这种情况下:

  • 交易由Spring自动管理。
  • 我的DAO模块标记有@Transactional@Repository注释。
  • 我在DAO模块中使用带有EntityManager批注的@PersistenceContext
  • 我的数据库是MySQL

DAO模块中有一种方法可以在表中插入多个记录:

@Override
public void insertMultiplePippo(List<Pippo> pl) throws PippoException{
    try {
        for (Pippo p : pl) {
            try {
                entityManager.persist(p);
            } catch (MySQLIntegrityConstraintViolationException e) {
/*please enter HERE :) -->*/ logger.debug("Duplicate entry when retrieving history: keyname->" + p.getKeyName() + ", date->"
                        + p.getInsertionDate() + ", value->" + p.getContentValue());
            }
        }
    } catch (Exception e) {
        logger.error("Error during insert multiple data ",e);
        throw new PippoException(PippoException.CodeError.dbError, e.getMessage());
    }
}

我希望有多个插入,并且由于条目重复,程序将继续剩余的插入。 现在,不幸的是,当有重复的条目时,我在运行时有一个MySQLIntegrityConstraintViolationException,并且Hibernate停止了“ for”块和回滚内的执行。

我不知道ti如何处理这种情况。 有什么建议吗?

非常感谢。

1 个答案:

答案 0 :(得分:0)

如果表中的记录数量不是那么大,那么您可能希望以Set<> existingPippos的形式获取所有现有记录,并插入new HashSet<Pippo>(pl).removeAll(existingPippos)的结果,而不是寻找重复项。 / p>