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();