2017-02-20 44 views
0

В качестве части моего кода используется аннотированный метод @Transactional. В некоторых сценариях метод генерирует настраиваемое исключение, а выполняет откат. Всякий раз, когда это происходит, метод-вызов приводит к TransactionSystemException и не имеет возможности получить исходное особое исключение (его не основная причина Exeption).Spring hides RuntimeException, созданный методом @Transactional

Могу ли я каким-то образом получить доступ к исходному исключению, создаваемому моим методом? Могу ли я остановить весну от выброса TransactionSystemException, но все же откат?

@Transactional 
public Association create(Long accountId) { 
    // if association already exists, throw exception 
    throw new ErrorInfoException(ErrorInfo.duplicateAssociation(accountId).info("This Association already exists").build()); 
} 
+0

Вы можете добавить транзакционный метод, в котором вы выбрали эти пользовательские исключения? –

+0

@MaciejKowalski я отредактировал один из методов. они все довольно простые – Laures

+0

как вы пытаетесь получить корневое/исходное исключение из TransactionSystemException? –

ответ

1

Не знаю, как управлять исключениями вне этого метода, но вам нужно будет поймать TransactionSystemException, а затем, в вашем случае вызов getApplicationException() в качестве пользовательского исключения должны первый в стеке:

Вернуть исключение приложения, которое было отправлено до этого события , если оно есть.

Если по какой-то причине есть еще некоторые исключения в промежутке между затем пойти на getOriginalException(), которые в соответствии со спецификацией должны:

Возвращение исключение, которое было первым, чтобы быть брошенным в отказавший транзакция: т. е. исключение приложения, если оно есть, или собственная причина транзакции TransactionSystemException 10.

Если вы используете метод Exception getCause, то в этом случае это может быть неправильно.

+0

К сожалению, ApplicationException равно null, а Исходное исключение - это только «javax.persistence.RollbackException», которое уже является причиной. похоже, мое обычное исключение исчезло. – Laures