Я использую 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, но, похоже, это не имело значения. Наверное, я хочу откатить неудачное удаление, но цикл продолжится.