无法在实体删除时捕获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.flush在repository.delete.
THE END
二维码