小编Svi*_*ill的帖子

QueryDSL - 按别名排序

我正在使用 queryDSL 从 base 获取一些额外数据的用户:

public List<Tuple> getUsersWithData (final SomeParam someParam) {
  QUser user = QUser.user;
  QRecord record = QRecord.record;
  JPQLQuery = query = new JPAQuery(getEntityManager());

  NumberPath<Long> cAlias = Expressions.numberPath(Long.class, "cAlias");
  return query.from(user)
       .leftJoin(record).on(record.someParam.eq(someParam))
       .where(user.active.eq(true))
       .groupBy(user)
       .orderBy(cAlias.asc())
       .list(user, record.countDistinct().as(cAlias));
}
Run Code Online (Sandbox Code Playgroud)

尽管它按预期工作,但它在 SQL 中生成了两个 COUNT():

SELECT
  t0.ID
  t0.NAME
  to.ACTIVE
  COUNT(DISTINCT (t1.ID))
FROM USERS t0 LEFT OUTER JOIN t1 ON (t1.SOME_PARAM_ID = ?)
WHERE t0.ACTIVE = true
GROUP BY t0.ID, to.NAME, t0.ACTIVE
ORDER BY COUNT(DISTINCT (t1.ID))
Run Code Online (Sandbox Code Playgroud)

我想知道是否有可能得到这样的东西:

SELECT
  t0.ID
  t0.NAME
  to.ACTIVE
  COUNT(DISTINCT …
Run Code Online (Sandbox Code Playgroud)

java postgresql jpa querydsl

5
推荐指数
2
解决办法
7645
查看次数

标签 统计

java ×1

jpa ×1

postgresql ×1

querydsl ×1