为什么 hibernate 应该查询 return 可选列表?

Why should hibernate query return a List of Optionals?

有人告诉我休眠查询的标准是 return 每个对象包装在 Optional 中,即使 return 值是这样的列表 -

  List<Optional<XEntity>> findAllByStatus(String status);

单个对象应该包装在一个 Optional 中是完全合理的,但是我不明白当它是一个对象列表时的推理(对于具有未清理的自定义 findAll() 可能是个例外D b)。如果有一个空对象,那么它不会被查询拾取,如果没有对象对应于查询,那么一个空列表将被 returned。为每个项目添加一个 Optional 似乎很麻烦且没有必要。

有好几个人告诉我,将 Optionals 与 List 一起使用是最佳实践,但 none 给了我充分的解释,但我无法通过 Google 找到一个,而且我还没有找到使用 with

时 运行 遇到问题
  List<XEntity> findAllByStatus(String status);

我同意你的观点,对于单个对象来说,包裹在 Optional 中是一个不错的选择,但是对于像 List、Set 等集合,这对我来说似乎不是一个好的选择。特别是当您的 API 每次都确保 return 一个集合对象(列表对象或空列表)时。由于 findAllByStatus(String status) 确保它会 return object(s) 或者没有对象 在这种情况下 框架 将确保return 空列表。 如您所述,用 Optional 包装每个对象仅在列表中的任何对象为 Null.

时才有用

我没有发现 List findAllByStatus(String status); 有任何问题,但是我看到有人使用 Optional 这很危险并注入 运行 时间 异常。