我正在Spring Boot环境中开发应用程序,并且正在使用Hibernate持久化数据。在这种情况下:
@Transactional
和@Repository
注释。EntityManager
批注的@PersistenceContext
。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如何处理这种情况。 有什么建议吗?
非常感谢。
答案 0 :(得分:0)
如果表中的记录数量不是那么大,那么您可能希望以Set<> existingPippos
的形式获取所有现有记录,并插入new HashSet<Pippo>(pl).removeAll(existingPippos)
的结果,而不是寻找重复项。 / p>