Проблема setFirstResult () в Hibernate с драйвером jdbc для Oracle - PullRequest
9 голосов
/ 06 февраля 2009

Я пытаюсь выполнить нумерацию страниц в Hibernate, используя setFirstResult() и setMaxResults(), но я не получаю ожидаемых результатов при установке первого результата на 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, но я искал решение и не могу его найти. Кто-нибудь сталкивался с чем-то подобным и нашел исправление для него?

Ответы [ 2 ]

13 голосов
/ 06 февраля 2009

Видимо, добавление setFetchSize() делает свое дело. Так что-то вроде этого теперь отлично работает:

query.setFirstResult(0);  
query.setMaxResults(30);  
query.setFetchSize(30);  
List list = query.list(); //list.size() now returns... wait for it... 30
1 голос
/ 23 января 2013

Другое решение заключается в реализации собственного Oracle Dialect:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...