querydsl变压器组按计数

Wou*_*ems 7 java sql querydsl

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

categoryA -> 10 entries
categoryB -> 20 entries
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止:

query().from(application)
            .transform(groupBy(application.category).as(list(application)));
Run Code Online (Sandbox Code Playgroud)

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

我试着乱搞count()但没有运气.

有人知道怎么做吗?

Spu*_*ick 18

请注意,从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();
Run Code Online (Sandbox Code Playgroud)


Tim*_*per 8

变换组合groupBy意在用平面结果集构造树结构.你需要什么可以更容易表达为

query.from(application)
     .groupBy(application.category)
     .list(application.category, application.category.count())
Run Code Online (Sandbox Code Playgroud)


ncl*_*ord 5

如果使用 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();
Run Code Online (Sandbox Code Playgroud)