代码之家  ›  专栏  ›  技术社区  ›  Bernardo

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

  •  9
  • Bernardo  · 技术社区  · 17 年前

    我正在尝试使用Hibernate进行分页 setFirstResult() 和 setMaxResults()

    执行以下操作时:

    Query query = session.createQuery(queryString);  
    query.setFirstResult(0);  
    query.setMaxResults(30);  
    List list = query.list();  //list.size() returns 10  
    

    query.setFirstResult(1);  
    query.setMaxResults(30);  
    List list = query.list();  //list.size() returns 30  
    

    我读到这是jdbc驱动程序中的一个已知错误,但我搜索了一个解决方案,但似乎找不到它。有没有人遇到过类似的问题并找到了解决办法?

    2 回复  |  直到 17 年前
        1
  •  13
  •   Bernardo    17 年前

    显然增加了 setFetchSize() 这就是诀窍。这样的东西现在可以完美地工作了:

    query.setFirstResult(0);  
    query.setMaxResults(30);  
    query.setFetchSize(30);  
    List list = query.list(); //list.size() now returns... wait for it... 30
    
        2
  •  1
  •   Harald Brabenetz    13 年前

    另一个解决方案是实现您自己的Oracle方言:

    public class Oracle10gDialectLimitBugfix extends Oracle10gDialect {
        @Override
        public boolean forceLimitUsage() {
            return true;
        }
    }
    

    看见 https://forum.hibernate.org/viewtopic.php?p=2379096