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

标签 java spring hibernate spring-boot

我正在 Spring Boot 环境中开发一个应用程序,我正在使用 Hibernate 来保存数据。在这种情况下:

  • 事务由 Spring 自动管理。
  • 我的 DAO 模块标有 @Transactional@Repository 注释。
  • 我使用在带有 @PersistenceContext 注释的 DAO 模块中调用的 EntityManager
  • 我的数据库是 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” block 内执行并回滚。

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

非常感谢。

最佳答案

如果表中的记录数不是那么大,您可能希望将所有现有记录提取为 Set<> existingPippos并插入 new HashSet<Pippo>(pl).removeAll(existingPippos) 的结果,而不是捕捉重复。

关于java - Spring/Hibernate - 忽略重复条目并继续插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52680390/

相关文章:

java - 覆盖交易方法

java - 为什么 HotSpot ExecutionSample 事件总是返回 STATE_RUNNABLE?

java - 处理中带有纹理的三角形

java - Shedlock:使用属性文件中的 lockAtMostForString

spring - 嵌套具体化参数无法创建 ParameterizedTypeReference

hibernate - Hibernate HQL createQuery()list()类型强制转换为直接建模

hibernate - 如何在mysql中存储joda.money

java - 抽象工厂模式与桥接模式

java - Mac JVM渲染JTabbedPane 1.6及以上版本差异

java - Spring:尽管有@Autowired注释,为什么不调用setter