我被困在尝试查询(QueryDSL)工作,这给了我一个不同类别的计数.例如,我想要实现的目标:
categoryA -> 10 entries
categoryB -> 20 entries
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止:
query().from(application)
.transform(groupBy(application.category).as(list(application)));
Run Code Online (Sandbox Code Playgroud)
但是,这给了我每个类别所有整个条目的列表,我只想得到这个.
我试着乱搞count()但没有运气.
有人知道怎么做吗?
Spu*_*ick 18
请注意,从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();
Run Code Online (Sandbox Code Playgroud)
变换组合groupBy意在用平面结果集构造树结构.你需要什么可以更容易表达为
query.from(application)
.groupBy(application.category)
.list(application.category, application.category.count())
Run Code Online (Sandbox Code Playgroud)
如果使用 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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12582 次 |
| 最近记录: |