我正在使用 SpringData 的存储库。如果我尝试通过不存在或从不存在的 ID 删除实体,则会引发异常。由于我不想在删除之前检查该实体是否存在,所以它会静默失败会很好。这会使它变得更容易,因为可观察到的行为是相同的——在调用之后实体不再存在。它是否已被删除或从未存在过,我不在乎。
有没有办法修改 delete(EntityId)
的默认行为,以便在实体不存在时不会抛出异常?
Documentation of SpringData's delete表示如果实体不存在,它将抛出异常。
最佳答案
更新答案(反对票后)
我原来的回答(下面)实际上是错误的:我对这个问题的理解也受到了对 EmptyResultDataAccessException
缺失引用的影响。在官方 JavaDoc 中(正如 Adrian Baker 在他的评论中所报告的那样)。
因此 Yamashiro Rion 建议的解决方案可能是解决此问题的更好方案
if (repository.existsById(entityId)) {
repository.deleteById(entityId);
}
或这个(没有 if
,但可能表现更差):
repository.findById(entityId)
.map(repository::delete)
原始(错误)答案
JavaDocs 说 IllegalArgumentException
如果提供的参数 (id, entity, Iterable<T>
) 为 null 而不是 if entity does does not exsits 将被抛出。
如果你需要避免IllegalArgumentException
您可以实现一个自定义删除方法来检查 id != null
:
public void customDelete(ID id) {
if(id != null){
this.delete(id);
}
}
查看this docs section如果您不知道如何添加“Spring Data 存储库的自定义实现”
关于java - 如果实体不存在,如何告诉 Spring Data-repository delete 方法不抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38785622/