Как продолжить удаление элементов из базы данных (с помощью Spring), даже если одно удаление не удалось из-за исключения - PullRequest
0 голосов
/ 25 октября 2019

Я использую spring-boot и хочу удалить список элементов из базы данных. Поэтому я перебираю список и вызываю метод deleteItem, чтобы удалить каждый элемент из mysql.

В настоящее время, если одно из удалений элементов вызывает исключение (например, SQLIntegrityConstraintViolationException), ни одно из удалений не фиксируется. Я пытаюсь добиться того, чтобы, даже если удаление одного элемента завершилось неудачей, дальнейшие удаления элементов, которые выполняются без исключения, фиксируются.

@Transactional
public void deleteItems() {
 Collection<Item> items = itemRepo.getItems();
 items.forEach(item -> {
  try {
      deleteItem(item);
  } catch (Exception e) {
    log.warn("deletion failed for item: " + item.getId());
  }
 }
}

private void deleteItem(Item item) {
 //some buggy code to delete references to the item in other tables
 //sometimes the following might cause IntegretyConstrainViolation
 itemRepo.delete(item);
}

Как этого добиться, даже если одно конкретное удаление не удалось, цикл удаления элементов продолжаетсяи эти удаления без исключений совершаются? Я пытался играть с типом транзакции REQUIRES_NEW, но, похоже, это не имело значения. Наверное, я хочу откатить неудачное удаление, но цикл продолжится.

...