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

ただし、複数のグループを必要とするレポートに対して、より複雑なクエリを作成する予定です。複数のgroupbyへの正しいアプローチについてここで読みました。

JPA2 Criteria APIを使用してクエリを作成するにはどうすればよいですか?

4

1 に答える 1

6

JPA 2CriteriaAPIのFROM句でサブクエリを使用することはできません。JPQLと同じ制限があります。JPA 2仕様では、JPQLのサブクエリについて次のように述べられています。

サブクエリは、WHERE句またはHAVING句で使用できます。

そして、Criteria APIのサブクエリについて言われていることは、同じ結論につながります。

相関サブクエリと非相関サブクエリの両方を制限述語で使用できます。サブクエリは、サブクエリオブジェクトの作成と変更によって構築されます。

サブクエリインスタンスは、条件式で使用するために、CriteriaBuilderインターフェイスのall、any、または一部のメソッドに引数として渡すことができます。

サブクエリインスタンスをCriteriaBuilderexistsメソッドに渡して、条件付き述語を作成できます。

于 2012-07-20T07:39:55.737 に答える