Поймать исключение, изменить объект, зафиксировать и перебросить исключение - PullRequest
0 голосов
/ 22 октября 2018

У меня следующая ситуация:

MyStoredEntity myStoredEntity = myStoredEntityService.get(id)
try {   
    myStoredEntityService.doSomething()
} catch (GeneralException) {
    myStoredEntity.setFail(true)
    throw e;
}

Весь этот код находится внутри @Transactional (распространение = Propagation.REQUIRES_NEW).По сути, я хочу вызвать doSomething и, если это вызывает исключение, установить поле сущности, зафиксировать и повторно вызвать исключение.Но это не работает, потому что транзакция помечена как откат.

1 Ответ

0 голосов
/ 22 октября 2018

Вы можете использовать параметр noRollbackFor аннотации @Transactional для исключений времени выполнения, которые вы хотите перехватить без отката транзакции.Как то так:

@Transactional(noRollbackFor = {SomeServiceRuntimeException.class})
public foo() {
    MyStoredEntity myStoredEntity = myStoredEntityService.get(id);
    try {   
        myStoredEntityService.doSomething();
    } catch (SomeServiceRuntimeException e) {
        myStoredEntity.setFail(true);
        myStoredEntityService.save(myStoredEntity);
        throw e;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...