@transaction para pegar todo tipo de exceções

Caros, eu estou com um problema no @transaction, ele não está garantindo o rollback. Como eu faço uma forma de que ele pegue todas as exceções e nesse caso refaça a transação (não salvar). É possível um exceção ficar silenciosa para ele. O método deveria salvar uma ação no banco se conseguisse mandar uma mensagem também… Que vem de uma outra API .

Não conheço tanto de Java, mas até onde sei deveria considerar qualquer exception lançado. Logicamente nao vai pegar se tiver um try que ignore a exception (sem lançar outro).

Parece que o @Transaction apenas marca como rolback caso ocorra alguma exceção runtime (unchecked).

1.4.3. Rolling Back a Declarative Transaction

Nesta parte:

In its default configuration, the Spring Framework’s transaction infrastructure code marks a transaction for rollback only in the case of runtime, unchecked exceptions. That is, when the thrown exception is an instance or subclass of RuntimeException . (Error instances also, by default, result in a rollback). Checked exceptions that are thrown from a transactional method do not result in rollback in the default configuration.


Caso vc queira realizar rollback para alguma exceção checada (geralmente, de negócio), vc pode especificar na anotação:

@Transactional(rollbackFor = SuaExcecao.class)
1 curtida