Есть ли более эффективный способ разбивки на страницы в Hibernate, чем выполнение запросов select и count? - PullRequest
37 голосов
/ 03 октября 2008

Обычно запросы на нумерацию страниц выглядят так. Есть ли лучший способ вместо создания двух почти одинаковых методов, один из которых выполняет "select * ...", а другой - "count * ..."?

public List<Cat> findCats(String name, int offset, int limit) {

    Query q = session.createQuery("from Cat where name=:name");

    q.setString("name", name);

    if (offset > 0) {
        q.setFirstResult(offset);
    }
    if (limit > 0) {
        q.setMaxResults(limit);
    }

    return q.list();

}

public Long countCats(String name) {
    Query q = session.createQuery("select count(*) from Cat where name=:name");
    q.setString("name", name);
    return (Long) q.uniqueResult();
}

Ответы [ 11 ]

0 голосов
/ 04 октября 2008

вот как устроено разбиение на страницы в спящем режиме

Query q = sess.createQuery("from DomesticCat cat");
q.setFirstResult(20);
q.setMaxResults(10);
List cats = q.list();

Вы можете получить больше информации из документов гибернации по адресу: http://www.hibernate.org/hib_docs/v3/reference/en-US/html_single/#objectstate-querying-executing-pagination В разделах 10.4.1.5 и 10.4.1.6 представлены дополнительные параметры flexbile.

BR
~ A

...