如何检查是否在HQL中的另一个集合中存在集合的所有元素

时间:2012-12-27 08:14:06

标签: hibernate collections mapping hql

我有一个Course实体,它有一个Skill实体的映射集合。现在我想通过HQL检查,如果course.skills集合的所有元素都存在于另一个集合中,我将在查询中作为参数传递。

我可以使用IN语句检查一个元素是否已经存在于另一个集合中,但我似乎无法弄清楚如何检查是否存在所有元素。

希望有人可以帮助我。谢谢!

1 个答案:

答案 0 :(得分:2)

我很想找到一个更优雅的解决方案来解决这个问题,但我用这样的查询解决了这个问题:

select course from Course course
where not exists (
    select skill.id from Skill skill
    where skill.id in :setOfSkillIdsToHave
    and skill.id not in (
        select courseSkill.id
        from Course course2
        inner join course2.skills courseSkill
        where course2.id = course.id))

或,

select course from Course course
where :numberOfSkillsToHave = (
    select count(skill.id)
    from Course course2
    inner join course2.skills courseSkill
    where courseSkill.id in :setOfSkillIdsToHave
    and course2.id = course.id)