我有一个具有技能实体映射集合的课程实体。现在我想通过 HQL 检查 course.skills 集合的所有元素是否存在于另一个集合中,我将在查询中将其作为参数传递。
我可以使用 IN 语句检查一个元素是否已经在另一个集合中,但我似乎无法弄清楚如何检查是否所有元素都存在。
希望有人可以帮助我。谢谢!
我有一个具有技能实体映射集合的课程实体。现在我想通过 HQL 检查 course.skills 集合的所有元素是否存在于另一个集合中,我将在查询中将其作为参数传递。
我可以使用 IN 语句检查一个元素是否已经在另一个集合中,但我似乎无法弄清楚如何检查是否所有元素都存在。
希望有人可以帮助我。谢谢!
我很想为这个问题找到一个更优雅的解决方案,但我用这样的查询来解决它:
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)