Я занимаюсь разработкой приложения в среде Spring Boot и использую Hibernate для сохранения данных.В этом случае:
- транзакции управляются Spring автоматически.
- мой модуль DAO помечен примечаниями
@Transactional
и @Repository
. - Я использую
EntityManager
вызывается в модуле DAO с аннотацией @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
" и выполняет откат.
Я понятия не имею, как справиться с этим сценарием.Пожалуйста, какие-либо предложения?
Спасибо большое.