Hibernate Criteriaを使用しているときに、ON句内に別のConditionを適用する必要がある状況があります。
MySQLを作成していますが、HibernateCriteriaでMySQLを変換する合理的な方法を見つけることができません。
SELECT s.StudentID AS StudentID, sc.CourseID AS CourseID
FROM Student s
LEFT JOIN StudentCourse sc ON
(sc.StudentID = s.StudentID AND sc.CourseID = 'XXX')
このクエリで私がしていること
すべての学生リストを特定のコースに登録するかどうかを指定します。
4人の学生がいて、1人の学生だけがコースに登録している場合、結果は次のようになります。
StudentID, CourseID
1 NULL
2 XXX
3 NULL
4 NULL
これまでのところ、私がやったことは
Criteria cr = getSession().createCriteria(Student.class);
cr.createAlias("studentCourse", "sc", CriteriaSpecification.LEFT_JOIN)
.add(Restrictions.eq("sc.CourseID", 'XXX'));
このステートメントを実行すると、次のクエリと同等のクエリが得られます
SELECT *
FROM Student s
LEFT JOIN StudentCourse sc ON (sc.StudentID = s.StudentID)
WHERE sc.CourseID = 'XXX'
現在、このクエリはクエリの目的を果たしていません。CourseIDがnullでない1行のみを返します。
編集
Hibernateバージョン3.4.0GA