无法在实体删除时捕获ConstraintViolationException

我在删除具有一些相关数据的实体时遇到问题。当我在我的服务中调用存储库删除方法时,我有这个异常:org.postgresql.util.PSQLException:错误:更新或删除表“表”违反外键约束......代码是这样的:

@Transactional
public void delete(Long id) {
    Entity entity = repository.findById(id).orElseThrow(()->new Exception("not found"));
    try {
       repository.delete(entity);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

问题是,即使我尝试捕获 Throwable 或 ConstraintViolationException,该异常也不会被 catch 块捕获。为什么这不起作用?可以做我想做的吗?

谢谢

回答

这是由于 JPA 写在缓存后面。JPA 收集您对实体所做的所有更改,并尝试尽可能晚地对数据库执行这些更改。

在您的情况下,执行发生在事务提交时,即在您离开 try catch 块之后。

解决此问题的最简单方法是repository.flushrepository.delete.


以上是无法在实体删除时捕获ConstraintViolationException的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>