你说的对。 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 许可协议
你说的对。 JPA 规范对此只字不提。但是 Java Persistence with Hibernate book, 2nd edition 说:
当您调用 query.getResultList() 而没有结果时,Hibernate JPA 实现(实体管理器)返回 null。
更新
正如一些用户指出的那样,最新版本的 Hibernate 似乎返回了一个空列表。
当找不到任何结果时,Eclipselink 中也会返回一个空列表。