繁体   English   中英

Hibernate的setFirstResult()问题与Oracle jdbc驱动程序有关

[英]Hibernate's setFirstResult() issue with Oracle jdbc driver

我正在尝试使用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驱动程序中的一个已知错误,但我搜索了一个解决方案,我似乎无法找到它。 有没有人遇到类似的东西,并找到了解决方案?

显然添加setFetchSize()就可以了。 所以像这样的东西现在完美无缺:

query.setFirstResult(0);  
query.setMaxResults(30);  
query.setFetchSize(30);  
List list = query.list(); //list.size() now returns... wait for it... 30

另一个解决方案是实现自己的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中得到修复

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM