有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java querydsl转换器按计数分组

我一直在努力让一个查询(QueryDSL)工作,它会给我一个不同类别的计数。 例如,我正在努力实现的目标:

categoryA -> 10 entries
categoryB -> 20 entries

这就是我目前的情况:

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

然而,这给了我每个类别一个完整条目的列表,我只想计算一下

我试着和count()混日子,但运气不好

有人知道怎么做吗


共 (3) 个答案

  1. # 1 楼答案

    transform combined groupBy旨在从平面结果集构造树结构。你所需要的可以简单地表达为

    query.from(application)
         .groupBy(application.category)
         .list(application.category, application.category.count())
    
  2. # 2 楼答案

    如果使用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();
    
  3. # 3 楼答案

    请注意,从Querydsl 4开始。x,蒂莫·韦斯特坎普(Timo Westkä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();