我有以下代码
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时,我发现Hibernate生成的SQL是
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。
答案 0 :(得分:5)