如何通过QueryDSL计算从JPASubQuery查询返回的所有行?

时间:2014-11-19 09:55:27

标签: jpa querydsl

我的subQuery在名为' billingData'的表中返回所有serviceTypeIds及其各自计数的列表。

我想对subQueryResult

执行count(*)操作
JPASubQuery subQuery = new JPASubQuery();
subQuery.from(billingData);
subQuery.where(
        billingData.serviceTypeId.in(ServiceType.TYPE_ONE.getId(), ServiceType.TYPE_ONE_TWO.getId())
                .and(billingData.accountId.isNull())
                .and(billingData.price.isNotNull())
                .and(billingData.numberId.eq(numbers.id)));//join condition
subQuery.groupBy(billingData.serviceTypeId);
subQuery.having(billingData.count().goe(1));

我的计数尝试

            subQuery
            .list(billingData.serviceTypeId, billingData.serviceTypeId.count())
            .count().eq(2L);

失败并显示错误

java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: expecting CLOSE, found ','

如果您没有指定要计算的内容,则会发生错误。

我想执行一个简单的计数(*),但是没有找到如何从子查询中提取列名作为计数参数的方法。

真的卡在这里:/

1 个答案:

答案 0 :(得分:1)

以下计数表达式

subQuery.list(billingData.serviceTypeId).count().eq(2L);

subQuery.count().eq(2L);

subQuery.unique(billingData.serviceTypeId.count()).eq(2L);
JPQL

不支持使用多列计数