我试图让查询(QueryDSL)工作,这让我计算了不同的类别。 例如,我想要实现的目标:
categoryA -> 10 entries
categoryB -> 20 entries
这是我到目前为止所做的:
query().from(application)
.transform(groupBy(application.category).as(list(application)));
然而,这给了我每个类别所有整个条目的列表,我只想得到这个。
我尝试弄乱count()
,但没有运气。
有人知道怎么做吗?
答案 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();