使用条件计算hibernate中按行分组的数量

时间:2015-01-08 16:08:58

标签: java sql hibernate group-by

我想用hibernate Criteria API计算group by行的数量,但我只计算每组中聚合的行数:

ProjectionList projectionList = Projections.projectionList()
        .add(Projections.groupProperty("color"))
        .add(Projections.rowCount());
Criteria criteria = session.createCriteria("ProductEntity");
criteria.setProjection(projectionList);
// adding some criteria
List results = criteria.list();

以上代码将导致此查询:

select p.color, count(*) from product p group by p.color

但我想要这个查询:

select count(*) from (select p.color from product p group by p.color)

我知道可以使用HQL,但我不想使用它。那么我如何使用Criteria API执行此操作?

1 个答案:

答案 0 :(得分:2)

如果您想知道有多少种不同的颜色,您应该使用

Projections.countDistinct("color")

这将导致查询返回与此相同的结果:

select count(*) from (select p.color from product p group by p.color)