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()
Другие вопросы по тегам