querydsl变压器组按计数

我被困在试图获得一个查询(QueryDSL)工作,这给了我一个不同类别的计数。 例如,我想要实现的目标:

categoryA -> 10 entries categoryB -> 20 entries 

这是我到目前为止:

 query().from(application) .transform(groupBy(application.category).as(list(application))); 

但是,这给了我每个类别所有整个条目的列表,我只是想得到这个。

我尝试用count()搞乱,但没有运气。

有人知道怎么做吗?

变换组合groupBy用于从平坦结果集构造树结构。 你需要什么可以更容易表达为

 query.from(application) .groupBy(application.category) .list(application.category, application.category.count()) 

请注意,从Querydsl 4.x开始TimoWestkämper接受的答案已不再有效。 Querydsl 4.0中的重大更改已删除query.list()方法 。

使用Querydsl 4.0+的解决方案现在将是:

 query.from(application) .groupBy(application.category) .select(application.category, application.category.count()) .fetch(); 

如果使用4.1.4,则可能需要使用JPAQueryFactory而不是JPAQuery

如果使用JPAQuery,则从groupBy返回时没有select()或fetch()。

 JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager); queryFactory .select(application.category, application.category.count()) .from(application) .groupBy(application.category) .fetch();