【发布时间】:2017-09-14 11:40:37
【问题描述】:
我有一个结构:
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;
}
我想在现有的 select 语句中添加一个新条件,以便在 ChosenCourseDatePeriod 中按最早 startDateTime 查找对象。
1)选择语句:
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;
结果:
组函数的使用无效
2)选择语句:
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;
结果:
“where 子句”中的未知列“earliestDate”,原因:null
3) 我决定使用 2 个SELECT 语句,这很有帮助。
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;
我的第一个和第二个解决方案有什么问题?可以只做一个SELECT吗?
【问题讨论】: