Languages
 
 
 
 
Navigation
 
 
 
 
 
 

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(). Это то, что мне было интересно.

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


Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

Вместо

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

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>

More information about formatting options

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