使用Hibernate的Projections.countDistinct会产生意外的结果

时间:2011-01-06 15:34:52

标签: java oracle hibernate criteria

我有以下代码


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。

1 个答案:

答案 0 :(得分:5)