Languages
 
 
 
 
Навигация
 
 
 
 
 
 

Hibernate. Count запросы без HQL

Мне нравится пользоваться объектом Criteria для составления запросов. Очень удобно и наглядно, гораздо лучше чем писать запрос в виде HQL. Приведу пример:

  @SuppressWarnings("unchecked")
  public List<LogAdd> findAddLogs(Long minLogID) {
    Criteria criteria = session.createCriteria(LogAdd.class);
    criteria.add(Restrictions.gt("id", minLogID));
    criteria.addOrder(Order.asc("date"));
    return criteria.list();
  }

До недавнего времени приходилось использовать HQL только для запросов типа "count". Так как просто взять размер массива, означает достать все объекты из базы и только потом считать сколько их, а это нас явно не устраивает.

А вот недавно нашел метод как выполнять count запросы используя Criteria объект:

  public Integer countAddLogs(Long minLogID) {
    Criteria criteria = session.createCriteria(LogAdd.class);
    criteria.add(Restrictions.gt("id", minLogID));
    criteria.setProjection(Projections.rowCount());
    return (Integer) criteria.list().get(0);
  }

Обратите внимание на Projections.rowCount(). Это то, что мне было интересно.

Америки не открыл, но вот опубликать решил. Может будет полезно кому-то.


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Вместо

Вместо criteria.list().get(0) наверно будет правильней использовать criteria.uniqueResult(). Но есть один недостаток у критериев - при использовании rowCount() всегда возвращается Integer, при этом если PK объявлен как Long - критерий все равно будет тупо возвращать Integer(версия 3.2.5, судя по changelog в 3.2.6 не пофиксили). Поэтому приходится использовать обычный HQL.

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Допускаются только следующие теги HTML: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>

Подробнее о форматировании

 
 
 
 
 
 
  • hooligan
  • cupuyc
  • ESoImk
  • LeKz
  • Anton
 
 
 
© 2006-2008 kobyleha.com