提问者:小点点

如何捕获未检查的事务异常


我用的是spring-boot和JPA。我试图捕捉未检查的异常,如(违反约束)引发的事务。即使我添加了catch块,它也会在超出事务边界时抛出。

我谷歌了一下,发现可以通过事务回调来实现。我尝试了下面的代码:仍然是给出错误

public class TransactionAspect extends TransactionSynchronizationAdapter {

    @Before("@annotation(org.springframework.transaction.annotation.Transactional)")
    public void registerTransactionSyncrhonization() {
        TransactionSynchronizationManager.registerSynchronization(this);

    }

    @Override
    public void afterCompletion(int status) {
        // code
        System.out.println(status);
    }
}

请帮帮我!!


共1个答案

匿名用户

您需要在< code>try{ manager.flush()中手动刷新JPA实体管理器;} catch(ConstraintViolationException){ } 。@Transactional aspect是围绕方法调用的,您无法捕获这个异常,因为它在方法被调用后被刷新。