I have a structure:
public class ChosenCourseDate {
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name="chosencoursedate_id")
List<ChosenCourseDatePeriod> chosenCourseDatePeriod;
}
public class ChosenCourseDatePeriod {
Date startDateTime;
Date endDateTime;
@ManyToOne
@JoinColumn(name="chosencoursedate_id")
ChosenCourseDate chosenCourseDate;
}
I want to add a new condition into an existed select statement to find objects by earliest startDateTime in ChosenCourseDatePeriod.
1)Select statement:
select registration from CourseRegistration registration
left join registration.chosenCourseDate as chosencoursedate
left join chosencoursedate.chosenCourseDatePeriod as period
where registration.candidate =:candidate
and registration.course =:course
and min(period.startDateTime) >=:now;
Result:
Invalid use of group function
2)Select statement:
select registration, min(period.startDateTime) as earliestDate from CourseRegistration registration
left join registration.chosenCourseDate as chosencoursedate
left join chosencoursedate.chosenCourseDatePeriod as period
where registration.candidate =:candidate
and registration.course =:course
and earliestDate >=:now;
Result:
Unknown column 'earliestDate' in 'where clause', cause: null
3) I decided to use 2 SELECT
statements, it helped.
select registration from CourseRegistration registration
left join registration.chosenCourseDate as chosencoursedate
where registration.candidate =:candidate
and registration.course =:course
and (SELECT min(period.startDateTime) FROM ChosenCourseDate inChosenCourseDate join inChosenCourseDate.chosenCourseDatePeriod period where inChosenCourseDate = chosenCourseDate) >=:now;
What's wrong with my first and second solutions? Does it possible to do only one SELECT
?