4

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

这是我正在使用的示例:

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 回答