Hibernate-Criteria:在'ON Clause'中使用多个条件

时间:2012-09-24 07:40:05

标签: java sql hibernate hibernate-criteria

我有一种情况,我需要在使用Hibernate Criteria时在ON子句中应用另一个Condition。

我正在编写MySQL,我无法在Hibernate Criteria中找到任何合理的转换方法。

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')

我在此查询中正在做什么

我希望所有学生名单都参加指定课程。

如果我有四名学生,并且只有一名学生参加了一门课程,那么结果应该是

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不为空的行。

修改

Hibernate版本3.4.0GA

1 个答案:

答案 0 :(得分:1)

您可以将第二个条件移动到常规WHERE子句中,如

WHERE (sc.CourseID = 'XXX' or sc.CourseID is null)