我正在尝试使用setFirstResult()
和setMaxResults()
对Hibernate进行分页,但是在将第一个结果设置为0时,我没有得到预期的结果。
执行以下操作时:
Query query = session.createQuery(queryString);
query.setFirstResult(0);
query.setMaxResults(30);
List list = query.list(); //list.size() returns 10
但如果我将第一个结果设置为1(或者任何不同于0的结果):
query.setFirstResult(1);
query.setMaxResults(30);
List list = query.list(); //list.size() returns 30
我读到这是jdbc驱动程序中的一个已知错误,但我搜索了一个解决方案,我似乎无法找到它。有没有人遇到类似的东西,并找到了解决方案?
答案 0 :(得分:13)
显然添加setFetchSize()
就可以了。所以这样的事情现在完美无缺:
query.setFirstResult(0);
query.setMaxResults(30);
query.setFetchSize(30);
List list = query.list(); //list.size() now returns... wait for it... 30
答案 1 :(得分:1)
另一个解决方案是实现自己的Oracle方言:
public class Oracle10gDialectLimitBugfix extends Oracle10gDialect {
@Override
public boolean forceLimitUsage() {
return true;
}
}
请参阅https://forum.hibernate.org/viewtopic.php?p=2379096
更新:似乎已在Oracle 11.2.0.1.0中修复