【问题标题】:HQL (Hibernate) how to check if a list of elements is a subset of another list?HQL(Hibernate)如何检查元素列表是否是另一个列表的子集?
【发布时间】:2012-07-13 11:26:23
【问题描述】:

我很难创建一个 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 行,一切正常。但是如果选择了更多,则查询失败,因为我正在尝试检查列表是否在列表中...

我确定我在这里遗漏了一些东西,所以请提供任何帮助。

谢谢

【问题讨论】:

  • 请包装您的查询,这样我们就不必滚动了。

标签: java hibernate hql


【解决方案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”的权限都在角色权限中相同。

【讨论】:

  • 感谢您的意见,它就像一个魅力。遗憾的是,我们无法使用“in elements”检查开箱即用的两个列表......(我会暂时保留这个问题,看看是否有不同的答案)
猜你喜欢
  • 2021-08-24
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多