Используя Spring Boot + Hibernate, я пытаюсь массово удалить данные, используя nameQuery или nativeQuery. Некоторые элементы имеют нарушения ограничений, и Spring / Hibernate генерирует полный откат.
Можно ли избежать отката? т.е. 100 записей для удаления, 3 имеют ограничения, поэтому Hibernate генерирует откат на 100, но мне нужно откатить только 3 и все еще хочу удалить 97 элементов. Сейчас я создал плохое решение, я использовал для l oop и выполняю 100 sql запросов.
На сервисном уровне:
@Transactional(noRollbackFor = {
SQLIntegrityConstraintViolationException.class,
PersistenceException.class,
ConstraintViolationException.class,
DataIntegrityViolationException.class })
public int deleteAll(String ids[]) {
call.dao.delete(ids)
}
На слое Hibernate:
delete(String ids[]) {
sql = "DELETE from mae1000 as x WHERE x.idccty in (:ids)";
int r = getCurrentSession().createNativeQuery(sql).setParameter("ids", Arrays.asList(ids)).executeUpdate();
}