querydsl transformer group by count
Solution 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())
Solution 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();
Solution 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();
Wouter Willems
I work at http://www.magnet.me as an allround developer. Programming with languages for both back-end and front-end purposes. My biggest skillset and interest lay within front-end coding (angular) right now.
Updated on October 03, 2020Comments
-
Wouter Willems about 3 years
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?