如何解决setMaxResult(0) 在 hibernate 5.2.6+ 中返回一个空列表,但在以前的版本中并非如此
我正在将休眠版本从 5.0.12.Final
迁移到 5.4.28.Final
,并且我执行了一些明显的直接弃用更改,例如将 org.hibernate.Query
更改为 org.hibernate.query.Query
,但遇到了以下重大更改.
示例代码片段
Query query = this.getSessionFactory().getCurrentSession().getNamedQuery("fetchPhotos");
query.setFirstResult(firstResult);
query.setMaxResults(limit);
return query.list();
在版本迁移之前,即使我们将 setMaxResults
值设置为 zero
,这被认为是 no limits
,但最新的休眠更改返回 Collections#emptyList
只要它满足条件 maxResults==0
就立即执行。后续分析发现change是因为hibernate ticket,还发现了库级别test case断言的行为。虽然 Query.setMaxResults(0)
似乎不合逻辑,但最新的变化迫使我们有一个类似于下面的条件
if(limit > 0){
query.setMaxResults(limit);
}
真正的问题是我们在整个代码库中的无数地方都使用了 query.setMaxResults(limit)
片段,并且更改所有出现的代码似乎很耗时。 是否存在任何解决方法来保持向后兼容性行为,例如 setMaxResults(0)
== no limits
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。