微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

setMaxResult(0) 在 hibernate 5.2.6+ 中返回一个空列表,但在以前的版本中并非如此

如何解决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 举报,一经查实,本站将立刻删除。