0

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

4

1 に答える 1

1

2 番目の基準を、次のような一般的な WHERE 句に移動できます。

WHERE (sc.CourseID = 'XXX' or sc.CourseID is null)
于 2012-09-24T07:54:49.680 に答える