【问题标题】:How to catch unchecked transaction exception如何捕获未经检查的事务异常
【发布时间】:2017-08-02 09:40:05
【问题描述】:

我正在使用 spring-boot 和 JPA。我试图捕获像 (Constraint Violation) 这样引发事务的未经检查的异常。即使我添加了 catch 块,它也会在超出事务边界时抛出。

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

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);
    }
}

请帮帮我!!

【问题讨论】:

    标签: java hibernate jpa spring-boot


    【解决方案1】:

    您需要手动刷新 JPA 实体管理器 try{ manager.flush(); }catch(ConstraintViolationException){}。 @Transactional 方面围绕方法 调用并且您无法捕获此异常,因为它在调用方法后被刷新。

    【讨论】:

    • +1 谢谢..是的。你说的对。但是是否有另一种解决方法而不手动调用flush?因为我必须在任何地方手动调用它。我想让它成为通用逻辑
    • @NFE 我不知道,但您可以尝试在@Transactional 上一级方法中提取 try{}catch{} 或使用@ExceptionHandler 捕获全局异常
    猜你喜欢
    • 2011-10-02
    • 2021-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    相关资源
    最近更新 更多