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

2019-09-19 10:10发布

我有艰难的时间,创建一个HQL查询,如果记录表中的“A”列表“X”被包含在同一表“X”的另一份名单“B”来检查。

下面是我使用的例子:

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

现在,这个查询只是一个简单的例子,阐明了一下,每个角色有1个或多个权限。

现在,这里的发生什么,如果子选择(许可p)返回1行,所有做工精细。 但是,如果更多的选择,查询失败,因为我想检查,如果目录是内...

我相信我在这里失去了一些东西,所以请任何帮助,将appretiated。

谢谢

Answer 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))

为了更清楚,这个查询检查,有没有名字“测试”,是不是在角色权限,这是相同的话说,名为“试验”的所有权限都在角色权限的许可。



文章来源: HQL (Hibernate) how to check if a list of elements is a subset of another list?