标准API计数来自分组计数

时间:2016-10-25 09:53:13

标签: java jpa criteria-api

我对Criteria API(JPA 2.0)有疑问。我想编写返回与查询相同结果的代码(选择计数来自(从......分组选择...)):

SELECT COUNT(*) FROM (
    SELECT COUNT(*) FROM a
    LEFT JOIN p ON a.id = p.a_id
    LEFT JOIN s ON a.id = s.a_id
    WHERE ... GROUP BY s.r_id
)

我写了这样的话:

CriteriaBuilder builder = slave.getCriteriaBuilder();
CriteriaQuery<Long> query = builder.createQuery(Long.class);
Subquery<Long> subquery = query.subquery(Long.class);       
Root<A> entity = subquery.from(A.class);
Join<A, P> pJoin = entity.join("p", JoinType.LEFT);
Join<A, S> sJoin = entity.join("s", JoinType.LEFT);
subquery.select(builder.count(entity));
subquery.where(/*where predicate*/);
subquery.groupBy(sJoin.get("r"));
query.select(builder.count(subquery));
Long result = slave.createQuery(query).getSingleResult();

但我得到了例外:

  

java.lang.IllegalStateException:未指定条件查询根

我在这里做错了什么?

0 个答案:

没有答案
相关问题