querydsl变压器组按计数

时间:2014-11-03 21:18:12

标签: java sql querydsl

我试图让查询(QueryDSL)工作,这让我计算了不同的类别。 例如,我想要实现的目标:

categoryA -> 10 entries
categoryB -> 20 entries

这是我到目前为止所做的:

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

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

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

有人知道怎么做吗?

3 个答案:

答案 0 :(得分:16)

请注意,从 Querydsl 4.x 开始,TimoWestkämper接受的答案已不再有效。 Breaking changes in Querydsl 4.0 have removed the query.list() method

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

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

答案 1 :(得分:7)

变换组合groupBy意在用平面结果集构造树结构。您需要的内容可以更容易表达为

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

答案 2 :(得分:0)

如果使用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();