querydsl transformer group by count

女生的网名这么多〃 提交于 2019-12-10 03:41:36

问题


I am stuck trying to get a query (QueryDSL) to work that gives me a count of distinct categories. For example, what I am trying to achieve:

categoryA -> 10 entries
categoryB -> 20 entries

This is what i have so far:

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

However, this gives me for each category a list of all whole entries, I just want to get a count of this.

I tried messing around with count() but no luck.

Anybody know how to do this?


回答1:


transform combined groupBy is meant to construct tree structures out of flat result sets. What you need can be easier expressed as

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



回答2:


Note that as of Querydsl 4.x, the accepted answer by Timo Westkämper is no longer valid. Breaking changes in Querydsl 4.0 have removed the query.list() method.

A solution working with Querydsl 4.0+ would now be:

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



回答3:


If using 4.1.4, you may need to use a JPAQueryFactory instead of JPAQuery

If using JPAQuery, there is no select() or fetch() on the return from groupBy.

JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);

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


来源:https://stackoverflow.com/questions/26723376/querydsl-transformer-group-by-count

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!