我正在使用 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)