2

Skill エンティティのマップされたコレクションを持つ Course エンティティがあります。course.skills コレクションのすべての要素が、クエリでパラメーターとして渡す別のコレクションに存在するかどうか、HQL を介して確認したいと考えています。

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 に答える