我有一个数据模型,帐户可以有多个用户:
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
但我计划为需要多个组的报告创建更复杂的查询。我阅读here关于多个群组的正确方法。
如何使用JPA2 Criteria API创建查询?
答案 0 :(得分:6)
您不能在FROM子句中使用子查询和JPA 2 Criteria API。它确实具有与JPQL相同的限制。在JPA 2规范中,关于JPQL中的子查询如下:
子查询可以在WHERE或HAVING子句中使用。
关于Criteria API中关于子查询的说法得出了相同的结论:
可以使用相关和非相关子查询 限制谓词。子查询是通过构造的 创建和修改子查询对象。
子查询实例可以作为参数传递给all,any或 CriteriaBuilder接口的一些方法用于条件 表达式。
可以将子查询实例传递给CriteriaBuilder存在方法 创建一个条件谓词。