【问题标题】:querydsl transformer group by count按计数查询dsl变压器组
【发布时间】:2014-11-03 21:18:12
【问题描述】:

我一直在试图让一个查询 (QueryDSL) 工作,让我计算不同的类别。 例如,我想要实现的目标:

categoryA -> 10 entries
categoryB -> 20 entries

这是我目前所拥有的:

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

但是,这为每个类别提供了所有条目的列表,我只想计算一下。

我尝试过使用count(),但没有成功。

有人知道怎么做吗?

【问题讨论】:

    标签: java sql querydsl


    【解决方案1】:

    请注意,从 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();
    

    【讨论】:

      【解决方案2】:

      transform 组合 groupBy 旨在从平面结果集构建树结构。你需要的东西可以更容易表达为

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

      【讨论】:

        【解决方案3】:

        如果使用 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();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-12-22
          • 2014-12-26
          • 2015-12-19
          • 2014-03-12
          • 1970-01-01
          • 2021-12-31
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多