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

2022-08-31 08:18:08

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

Javadoc和JPA规范什么也没说。


答案 1

你是对的。JPA规范对此只字未提。但是Java Persistence with Hibernate的书,第2版,说:

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

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

更新

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

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


答案 2

如果规格说它不可能发生,你会相信他们吗?假设你的代码可以针对不同的JPA实现运行,你会相信每个实现者都能做到吗?

无论如何,我都会进行防御性编码并检查空值。

现在最大的问题是:我们是否应该将“null”和空列表视为同义词?这是规范应该帮助我们的地方,而不是。

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

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


推荐