У меня проблема с пейджингом в моем приложении. Я хочу использовать методы 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
Я понятия не имею, почему только первые две «страницы» работают правильно, а после них я получил тот же диапазон строк.
Спасибо за любой совет
show_sql
иformat_sql
наtrue
. - person Dave L.   schedule 22.02.2013Hibernate: select this_.id as id0_0_, this_.firstName as firstName0_0_, this_.lastName as lastName0_0_ from Author this_ order by this_.id asc limit ? offset ? FirstRow: 20 - RowsLimit: 20
- person cz_Nesh   schedule 22.02.2013Author
иBook
. Кроме того,show_sql
заставляет распечатывать все sql - может быть, вы не видите весь журнал? - person Dave L.   schedule 23.02.2013