2011-01-06 4 views
5

У меня есть следующий кодProjections.countDistinct с Hibernate производит неожиданный результат


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

, целью которого является выяснить количество строк с разными значениями поля с именем «цвет». Проблема заключается в том, что


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 в этом случае.

ответ

Смежные вопросы