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

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


Чем плох HQL? public

Чем плох HQL?
public Integer countAddLogs(Long minLogID) {
   return (Integer)session.createQuery("select coun(id) 
   count from LogAdd where id = :minLogID")
   .setLong("minLogID", minLogID)
   .uniqueResult();
}

А зачем Long ? Ведь

А зачем Long ? Ведь rowCount() не PK возвращается, а их количество.

Вместо

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

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

Содержание этого поля является приватным и не предназначено к показу.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Syntax highlight code surrounded by the {syntaxhighlighter OPTIONS}...{/syntaxhighlighter} tags.

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

CAPTCHA
Защита от спам сообщений
 
 
 
 
 
 
  • emmie
  • hooligan
  • cupuyc
  • ESoImk
  • LeKz
 
 
 
© 2006-2009 kobyleha.com