我正在使用 SpringData 的存储库。如果我尝试通过不存在或从不存在的 ID 删除实体,则会引发异常。由于我不想在删除之前检查该实体是否存在,所以它会静默失败会很好。这会使它变得更容易,因为可观察到的行为是相同的——在调用之后实体不再存在。它是否已被删除或从未存在过,我不在乎。
有没有办法修改 delete(EntityId)
的默认行为,这样如果实体不存在,它就不会抛出异常?
SpringData 的 delete 文档 说,如果实体不存在,它将抛出异常。
原文由 EhmKah a.k.a. Michael Krauße 发布,翻译遵循 CC BY-SA 4.0 许可协议
更新的答案(投票后)
我原来的答案(下面)实际上是错误的:我对这个问题的理解也受到官方 JavaDoc 中缺少对
EmptyResultDataAccessException
的引用的影响(正如 Adrian Baker 在他的评论中所报告的)。所以这个问题的更好解决方案可能是 Yamashiro Rion 建议的
或者这个(没有
if
,但可能表现更差):原始(错误)答案
JavaDocs 说如果提供的参数 (id, entity,
IllegalArgumentException
Iterable<T>
) 是 null 并且 如果实体不存在则不会 抛出 --- 。如果你需要避免
IllegalArgumentException
你可以实现一个自定义删除方法来检查id != null
:如果您不知道如何添加 “Spring Data 存储库的自定义实现”, 请查看 此文档部分