HQL(休眠)如何检查元素列表是否为另一个列表的子集?

Eli*_*lio 4 java hibernate hql

我很难创建一个HQL查询,该查询检查表'X'的记录'a'的列表是否包含在同一表'X'的另一个列表'b'中。

这是我正在使用的示例:

select r 
from Role r 
where (
    select p 
    from Permission p 
    where p.name = 'test') in elements(r.permissions)
Run Code Online (Sandbox Code Playgroud)

现在,此查询仅作为示例,为了澄清一点,每个角色都具有1个或多个权限。

现在发生了什么,如果子选择(权限p)返回1行,则一切正常。但是如果选择更多,查询将失败,因为我正在尝试检查列表是否在列表中...

我确定我在这里缺少任何东西,因此请提供任何帮助。

谢谢

JB *_*zet 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))
Run Code Online (Sandbox Code Playgroud)

更清楚地说,此查询检查是否没有角色权限中没有名称“ test”的权限,这与说所有名称为“ test”的权限都在角色权限中相同。