I have a situation that I need to apply another Condition inside ON clause while using Hibernate Criteria.
I am writing my MySQL and I am unable to find any reasonable way of converting it in 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')
What I am doing in this Query
I want all the student List either enrolled in specified course or not.
IF I have four Students the and only one student is enrolled in a course the result should be like
StudentID, CourseID
1 NULL
2 XXX
3 NULL
4 NULL
So far I what I have done is
Criteria cr = getSession().createCriteria(Student.class);
cr.createAlias("studentCourse", "sc", CriteriaSpecification.LEFT_JOIN)
.add(Restrictions.eq("sc.CourseID", 'XXX'));
By running this statement I get the query equivalent to the following query
SELECT *
FROM Student s
LEFT JOIN StudentCourse sc ON (sc.StudentID = s.StudentID)
WHERE sc.CourseID = 'XXX'
Now this query does not serve the purpose of the query. It returns only one row where CourseID is not null.
EDIT
Hibernate Version 3.4.0GA
You can move your second criteria into the general WHERE clause like