Spring TransactionInterceptor отменяет мое исключение
У меня есть класс DAO ловить javax.persistence.PersistenceException
оборачивая их и выбрасывая как проверенное исключение. Этот метод помечен как @org.springframework.transaction.annotation.Transactional
,
Если я получу исключение в моем DAO, как нарушение ограничения, оно будет перенесено в мое пользовательское исключение, однако spring отменяет мое исключение
[tp1415357209-22] o.s.t.i.TransactionInterceptor : Application exception overridden by commit exception
и бросает свой собственный org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Transaction marked as rollbackOnly
"проглотить" мое исключение, просто зарегистрировав его и сбросив собственное исключение. Как я могу предотвратить это от весны?
PS
@Transactional(noRollbackFor = { MyCustomException.class})
не работает. Конечно, я хочу, чтобы транзакция была установлена как откат, но я не хочу, чтобы мое исключение проглатывалось весной.
4 ответа
Решение было использовать rollbackFor
вместо другого атрибута, чтобы весна не поглотила мое собственное исключение
Если у вас есть несколько различных проверенных исключений, которые вы можете вызвать в своем классе или методе, вы также можете использовать общий класс Exception.
@Transactional(rollbackFor = Exception.class)
убрать фигурные скобкиrollbackFor
быть таким
@Transactional(rollbackFor = MyCustomExc.class)
Пример на Котлине:
@Transactional(rollbackFor = [MagicNotAvailableException::class])
@Throws(MagicNotAvailableException::class)
fun doMagicOrThrow()