4

テーブル 'X' のレコード 'a' のリストが同じテーブル 'X' の別のリスト 'b' に含まれているかどうかを確認する HQL クエリを作成するのに苦労しています。

ここに私が使用している例があります:

select r 
from Role r 
where (
    select p 
    from Permission p 
    where p.name = 'test') in elements(r.permissions)

このクエリは単なる例です。少し明確にするために、各ロールには 1 つ以上の権限があります。

サブセレクト (パーミッション p) が 1 行を返す場合、すべて正常に動作します。しかし、さらに選択すると、リストがリスト内にあるかどうかを確認しようとしているため、クエリは失敗します...

私はここで何かが欠けていると確信しているので、どんな助けも感謝します.

ありがとう

4

1 に答える 1

5

もっと単純なものが存在するかもしれませんが、私はそれを見つけていません:

select r from Role r where not exists (
    select p.id from Permission p 
    where p.name = 'test'
    and p.id not in (select p2.id from Role r2 inner join r2.permissions p2
                     where r2 = r))

より明確にするために、このクエリは、ロールのアクセス許可に含まれていない名前「test」のアクセス許可がないことを確認します。これは、「test」という名前のすべてのアクセス許可がロールのアクセス許可にあると言っているのと同じです。

于 2012-07-13T11:33:14.630 に答える