2

我有一个具有技能实体映射集合的课程实体。现在我想通过 HQL 检查 course.skills 集合的所有元素是否存在于另一个集合中,我将在查询中将其作为参数传递。

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

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

4

1 回答 1

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)       
于 2012-12-27T08:28:53.710 回答