Как откатить транзакции всего l oop весной? - PullRequest
0 голосов
/ 06 февраля 2020

Итак, у меня есть al oop с несколькими транзакциями, происходящими внутри него, и если один элемент недействителен, я хочу, чтобы программа откатила все предыдущие транзакции. Я использую весеннюю загрузку для всех своих инъекций зависимостей и функциональности jpa

Этот фрагмент является методом обслуживания в службах

@Override
@Transactional(rollbackOn = ItemInvalidException.class)
public void saveAll (List<Item> items) throws ItemInvalidException{
    for(Item item :Items){
        if(item==invalid)
            throw new ItemInvalidException();
        itemRepository.save(item)
    }
}

1 Ответ

0 голосов
/ 06 февраля 2020

Идеальное поведение транзакции - это именно то, что было упомянуто вами. Транзакции будут совершаться только в конце метода, а не в каждой записи. В любой точке итерации, если мы получим исключение, вся транзакция будет откатиться без сохранения каких-либо данных.

Если вы чувствуете, что такого поведения не происходит, то я полагаю, что вы вызываете метод @Transactional с тем же компонентом. @Transactional работает только с методами, вызванными для прокси, созданных Spring. Это означает, что когда вы создаете @Service или другой компонент, метод, вызываемый извне, будет транзакционным. Если он вызывается из bean-компонента, ничего не произойдет, поскольку он не проходит через прокси-объект.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...