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

时间:2012-07-13 11:26:23

标签: 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)

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

现在发生了什么,如果subselect(权限p)返回1行,所有工作正常。但是如果选择了更多,则查询失败,因为我试图检查列表是否在列表中......

我确信我在这里遗漏了一些东西,所以请任何帮助都会有所帮助。

由于

1 个答案:

答案 0 :(得分:4)

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

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