Hibernate query.list() 方法返回空列表而不是空值

Posted

技术标签:

【中文标题】Hibernate query.list() 方法返回空列表而不是空值【英文标题】:Hibernate query.list() method is returning empty list instead of null value 【发布时间】:2011-04-05 16:28:50 【问题描述】:

当没有行时,query.list()criteria.list() 都返回 empty 列表而不是 null 值。

这背后的原因是什么?

【问题讨论】:

为什么要为空?我了解当您查询单个结果时 - 未找到返回 null 是有意义的。但是 list() 应该总是返回一个空列表!空列表是什么意思? 【参考方案1】:

原因是不强制在客户端代码中检查空值,与Effective Java 2nd Edition 第 43 条一致:返回空数组或集合,而不是空值

这使得客户端代码更简单,更不容易出错(很可能也是方法实现)。

null-return 习惯用法很可能是 C 编程语言的遗留物,在 哪些数组长度与实际数组分开返回。在 C 中,没有 如果返回零作为长度,则分配数组的优势。

【讨论】:

hmm...但是即使它阻止了空检查,我们仍然必须检查列表的大小...对吗?而且作为一种良好做法,我们也总是检查 null (至少在我们的团队中)。 这就是重点 - 如果您确定(基于 API 的承诺)一个值不能为空,那么您就不要检查空值。不,你不需要检查大小。当您迭代集合时,它只会跳过迭代。 好的...明白了。如果它是 null 并且作为我的客户,如果我没有检查它,NPE 可以关闭我的应用程序。但是如果它是一个空集合,它会跳过逻辑并继续(因为我们通常会检查大小)。感谢 Peter 和 Bozho。 如果你想跳过代码,如果列表是空的,不要检查大小,但如果它是空的:list.isEmpty()(它更快更清晰)【参考方案2】:

一致:返回一个包含所有结果的列表,不管有没有。

【讨论】:

以上是关于Hibernate query.list() 方法返回空列表而不是空值的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate HQL - query.list() 返回对象数组的对象数组

Hibernate query.list()查询结果为空

Hibernate Query.list 返回实际的 Object 实例而不是预期的类型

hibernate 中 query.list()的优化

Hibernate查询多个数据

我用的SSH怎么解决Hibernate,session is closed