setFirstResult и setMaxResults не работают должным образом
У меня проблема с подкачкой в моем приложении. Я хочу использовать методы setFirstResult и setMaxResults, но это дало мне неправильный вывод:
(Моя база данных: SQLite)
Пример:
Session session = HibernateUtil.getSessionFactory().openSession();
int page = 0;
int maxRows = 20;
while (page < 5) {
Criteria criteria = session.createCriteria(Book.class);
criteria.setFirstResult(page * maxRows).setMaxResults(maxRows);
criteria.addOrder(Order.asc("id"));
List<Book> list = criteria.list();
System.out.println("FirstRow: " + page * maxRows + " - RowsLimit: " + maxRows);
for (Book b : list) {
System.out.println(b.getId());
}
page++;
}
session.close();
Выход дал мне:
FirstRow: 0 - RowsLimit: 20
1
.
.
.
20
FirstRow: 20 - RowsLimit: 20
21
.
.
.
40
FirstRow: 40 - RowsLimit: 20
21
.
.
.
40
FirstRow: 60 - RowsLimit: 20
21
.
.
.
40
Я понятия не имею, почему только первые две "страницы" работают правильно, и после них у меня был одинаковый диапазон строк.
Спасибо за любой совет
1 ответ
Решение
Хорошо, вот решение.
http://shagy0101.blogspot.cz/2012/03/sqlite-jpa-hibernate-pagination.html
Проблема была в диалекте SQLite. Просто добавьте в свой SQLite Dialect этот метод:
@Override
public boolean bindLimitParametersInReverseOrder(){
return true;
}