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() 返回对象数组的对象数组