javax.persistence.Query.getResultList() 可以返回 null 吗?
如果是这样,在什么情况下?
Javadoc和JPA规范什么也没说。
如果是这样,在什么情况下?
Javadoc和JPA规范什么也没说。
你是对的。JPA规范对此只字未提。但是Java Persistence with Hibernate的书,第2版,说:
如果查询结果为空,则返回 null
Hibernate JPA 实现(实体管理器)在调用 query.getResultList() 时返回 null,但没有结果。
更新
正如一些用户所指出的那样,似乎最新版本的Hibernate返回了一个空列表。
当找不到任何结果时,Eclipselink 中也会返回一个空列表。
如果规格说它不可能发生,你会相信他们吗?假设你的代码可以针对不同的JPA实现运行,你会相信每个实现者都能做到吗?
无论如何,我都会进行防御性编码并检查空值。
现在最大的问题是:我们是否应该将“null”和空列表视为同义词?这是规范应该帮助我们的地方,而不是。
我的猜测是,空返回(如果确实可能发生)将等同于“我不明白查询”,空列表将是“是的,理解查询,但没有记录”。
您可能有一个处理不可解析查询的代码路径(可能是异常),我倾向于将空值返回该路径。