2012-12-27 215 views
2

我有一個具有Skill實體的映射集合的課程實體。現在我想檢查通過HQL,如果course.skills集合的所有元素存在於另一個集合中,我將作爲參數傳遞給查詢。如何檢查集合中的所有元素是否存在於HQL中的另一個集合中

我可以檢查一個元素是否已經在使用IN語句的其他集合中,但我似乎無法弄清楚如何檢查是否存在所有元素。

希望有人能幫助我。謝謝!

+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)  
相關問題