我有一个Course实体,它有一个Skill实体的映射集合。现在我想通过HQL检查,如果course.skills集合的所有元素都存在于另一个集合中,我将在查询中作为参数传递。
我可以使用IN语句检查一个元素是否已经存在于另一个集合中,但我似乎无法弄清楚如何检查是否存在所有元素。
希望有人可以帮助我。谢谢!答案 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)