HQL(Hibernate)如何检查一个元素列表是否是另一个列表的子集



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

下面是我使用的一个例子:

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

现在,这个查询只是一个例子,为了澄清一点,每个角色都有一个或多个权限。

现在发生的情况是,如果subselect(permission p)返回1行,则一切正常。但如果选择了更多,查询就会失败,因为我正在尝试检查列表是否在列表中。。。

我确信我在这里遗漏了什么,所以请提供任何帮助都将不胜感激。

感谢

也许存在更简单的东西,但我还没有找到:

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"的所有权限都在角色权限相同。

最新更新