子查询中JPA2标准克劳斯(Subquery in From claus in JPA2 Crite

2019-06-26 10:30发布

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

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标准API我的查询?

Answer 1:

您不能使用子查询从JPA 2标准API条款。 它确实有相同的限制JPQL呢。 在JPA 2规范以下内容说,大约在JPQL子查询:

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

什么是说,大约在标准API导致了同样的结论子查询:

二者相关和非相关子查询可以在限制谓词使用。 子查询是通过子查询对象的创建和修改构成。

子查询实例可以作为参数传递给所有,任何,或在条件表达式中使用CriteriaBuilder界面的一些方法进行传递。

子查询实例可以被传递给CriteriaBuilder存在的方法来创建条件谓词。



文章来源: Subquery in From claus in JPA2 Criteria