我正在 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/