2

我有一个数据模型,其中一个帐户可以有多个用户:

class Account {
    Long id;
}
class User {
    Long id;
    @ManyToOne
    Account account;
}

我想做以下查询,显示每个帐户的用户数:

select Account.id, NumUsers.num from Account, 
       (select Account.id as account_id, count(User.id) as num 
        from User join Account on User.account_id=Account.id 
        group by Account.id) as NumUsers 
where Account.id=NumUsers.account_id;

我知道我可以将这个特定的查询重写为:

select Account.id, count(User.id) from Account join 
       User on User.account_id=Account.id group by Account.id

但我计划为需要多个分组依据的报告创建更复杂的查询。我在这里读到了关于多个分组的正确方法。

如何使用 JPA2 Criteria API 创建查询?

4

1 回答 1

6

您不能在 JPA 2 Criteria API 的 FROM 子句中使用子查询。它确实具有与 JPQL 相同的限制。在 JPA 2 规范中,关于 JPQL 中的子查询如下所述:

子查询可以用在 WHERE 或 HAVING 子句中。

关于 Criteria API 中子查询的说法得出了相同的结论:

相关和非相关子查询都可以用于限制谓词。子查询是通过创建和修改子查询对象来构造的。

Subquery 实例可以作为参数传递给 CriteriaBuilder 接口的 all、any 或某些方法,以便在条件表达式中使用。

可以将 Subquery 实例传递给 CriteriaBuilder 存在方法以创建条件谓词。

于 2012-07-20T07:39:55.737 回答