Как массово удалить в Spring Hibernate? - PullRequest
0 голосов
/ 01 апреля 2020

Используя 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();
}       
...