Projection.countDistinct с Hibernate дает неожиданный результат - PullRequest
5 голосов
/ 06 января 2011

У меня есть следующий код


Criteria criteria = this.getCriteriaForClass(DeviceListItem.class);
Projection rowCountProjection = Projections.countDistinct("color");
criteria.setProjection(rowCountProjection);
int rowCount = ((Long) criteria.uniqueResult()).intValue();
return rowCount;

, цель которого - узнать количество строк с разными значениями для поля с именем "color".Проблема в том, что


Projections.countDistinct("color");

возвращает то же количество результатов, что и


Projections.count("color");

, даже если в представлении базы данных есть несколько строк одного цвета.При преобразовании объекта Criteria в SQL я вижу, что SQL, создаваемый Hibernate, равен


select count(this_.COLOR) as y0_ from DEVICESLIST_VIEW this_ where 1=1

, когда я ожидаю, что он будет


select count(distinct this_.COLOR) as y0_ from DEVICESLIST_VIEW this_ where 1=1

Почему он не работает так, как ожидалосьи есть ли какое-то лекарство?К сожалению, у меня нет возможности использовать HQL в этом случае.

1 Ответ

5 голосов
/ 06 января 2011

Это ошибка, исправленная в 3.5.2: HHH-4957 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...