Как откатить программно после корректной работы функций @Transactionnal?

В современном компиляторе, вероятно, не так много. Он может быть встроен без inline, и не не будет с inline.

0
задан Ehcnalb 17 January 2019 в 17:28
поделиться

2 ответа

Используйте @Transactional на уровне Controller. Чтобы вызвать откат, бросьте RuntimeException из контроллера.

Примерно так:

public class Controller {

    private final MyServiceImpl myService;

    @Transactional
    @PostMapping("/truc")
    public void truc() {
        Entity ent = new Entity();
        myService.createEntity(ent);
        Entity2 ent2 = new Entity2();
        myService.createEntity2(ent2);
        boolean b = {some conditions};
        if(b){
            //to do flush 
        }
        else{
            //This will trigger rollback 
            throw new RuntimeException("I want to rollback to cancel what I did in this method");
        }
    }
}
0
ответ дан Ken Chan 17 January 2019 в 17:28
поделиться

Вы можете добавить новый метод в MyServiceImpl, который вызывает оба метода createEntity() внутри. После этого вся бизнес-логика внутри этого метода будет обрабатываться транзакционно и автоматически откатываться при возникновении RuntimeException (используйте rollBackFor для проверенных исключений), поскольку ваш класс обслуживания помечен как trasactional. Также все открытые методы из MyServiceImpl становятся транзакционными, если вы добавите аннотацию @Transactional в ваш класс. Нет необходимости в отдельной аннотации для ваших методов (кроме случаев, когда вы хотите изменить некоторые параметры транзакции, такие как изоляция, распространение и т. Д.)

0
ответ дан Artur Vakhrameev 17 January 2019 в 17:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: