javax.persistence.Query.getResultList() 可以返回 null 吗?

新手上路,请多包涵

如果是这样,在什么情况下?

Javadoc 和 JPA 规范什么也没说。

原文由 rdk 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 703
2 个回答

你说的对。 JPA 规范对此只字不提。但是 Java Persistence with Hibernate book, 2nd edition 说:

如果查询结果为空,则返回null

当您调用 query.getResultList() 而没有结果时,Hibernate JPA 实现(实体管理器)返回 null。

更新

正如一些用户指出的那样,最新版本的 Hibernate 似乎返回了一个空列表。

当找不到任何结果时,Eclipselink 中也会返回一个空列表。

原文由 Arthur Ronald 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果规格说这不可能发生,你会相信吗?鉴于您的代码可以想象地针对许多不同的 JPA 实现运行,您会相信每个实现者都能正确执行吗?

无论如何,我都会进行防御性编码并检查是否为 null。

现在有个大问题:我们应该将“null”和空列表视为同义词吗?这是规格应该帮助我们的地方,但没有。

我的猜测是 null 返回(如果确实可能发生的话)将等同于“我不理解查询”,而空列表将是“是的,理解查询,但没有记录”。

您可能有一个处理不可解析查询的代码路径(可能是一个异常),我倾向于在该路径下引导一个空返回。

原文由 djna 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题