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 (将#修改为@)