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

rdk*_*rdk 112 java hibernate jpa

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

Javadoc和JPA规范什么也没说.

Art*_*ald 67

你是对的.JPA规范没有提及它.但Java Persistence with Hibernate一书第二版说:

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

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

UPDATE

正如一些用户所指出的,似乎最新版本的Hibernate会返回一个空列表.

  • 这肯定是过时的,Hibernate返回一个空列表. (25认同)
  • 既然是什么版本? (5认同)
  • 我仍然从Hibernate 4.3.10中获取null(作为Spring Data的JPA引擎运行).这仅适用于单个本机查询,因为典型的JPA查询按预期工作. (2认同)

djn*_*jna 22

如果规格说它不可能发生,你会相信它们吗?鉴于您的代码可能会与不同的JPA实现相悖,您是否相信每个实现者都能正确实现?

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

现在最大的问题是:我们应该将"null"和空List作为同义词吗?这是规范应该帮助我们的地方,而不是.

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

你可能有一个处理不可解决的查询的代码路径(可能是一个例外),我倾向于指向该路径的null返回.

  • “我不明白查询”应该作为 `Exception` 处理,返回 `null`,其中 `Collection` 是返回类型是一个明显的设计缺陷 (3认同)

小智 13

与Arthur的帖子相反,当我实际运行一个没有实体匹配的查询时,我得到一个空列表,而不是null.这是使用Hibernate并且我认为是正确的行为:当你要求实体集合而没有任何实体时,空列表是正确的答案.

  • 对于OpenJPA,我也得到一个空列表而不是null. (2认同)