Mysql JPQL非连接查询
我正在使用EclipseLink和MySQL。我试图从文件室实体中检索一个值,而不加入它 以下是我的计划实体的名称查询:Mysql JPQL非连接查询,mysql,jpa,eclipselink,jpql,Mysql,Jpa,Eclipselink,Jpql,我正在使用EclipseLink和MySQL。我试图从文件室实体中检索一个值,而不加入它 以下是我的计划实体的名称查询: @NamedQuery(name = "Schedule.findUnusedRoomForCourseLectureOnly", query = "SELECT r FROM Schedule s, Room r WHERE s.day = :sday AND (:stime NOT BETWEEN s.startTime AND s.endTime) AND r.id &
@NamedQuery(name = "Schedule.findUnusedRoomForCourseLectureOnly",
query = "SELECT r FROM Schedule s, Room r WHERE s.day = :sday AND (:stime NOT BETWEEN s.startTime AND s.endTime) AND r.id <> s.room.id")
@Entity
public class Schedule implements Serializable, Comparable<Schedule> {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "scheduledDay")
private int day;
@Temporal(javax.persistence.TemporalType.TIME)
private Calendar startTime; // 24 hr format
@Temporal(javax.persistence.TemporalType.TIME)
private Calendar endTime; // 24 hr format
@ManyToOne
private Faculty faculty;
@ManyToOne
private Room room;
@ManyToOne
private Subject subject;
private boolean lab;
@ManyToOne
private Section section;
public Schedule() {
this.startTime = Calendar.getInstance();
this.endTime = Calendar.getInstance();
}
public Schedule(int day, Calendar startTime, Calendar endTime, Faculty faculty, Room room, Subject subject, boolean lab, Section section) {
this.day = day;
this.startTime = startTime;
this.endTime = endTime;
this.faculty = faculty;
this.room = room;
this.subject = subject;
this.lab = lab;
this.section = section;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public int getDay() {
return day;
}
public void setDay(int day) {
this.day = day;
}
public Calendar getStartTime() {
return startTime;
}
public final void setStartTime(int hour) {
this.startTime.set(Calendar.HOUR_OF_DAY, hour);
this.startTime.set(Calendar.MINUTE, 0);
this.startTime.set(Calendar.SECOND, 0);
}
public Calendar getEndTime() {
return endTime;
}
public final void setEndTime(int hour) {
this.endTime.set(Calendar.HOUR_OF_DAY, hour);
this.endTime.set(Calendar.MINUTE, 0);
this.endTime.set(Calendar.SECOND, 0);
}
public Faculty getFaculty() {
return faculty;
}
public void setFaculty(Faculty faculty) {
this.faculty = faculty;
}
public Room getRoom() {
return room;
}
public void setRoom(Room room) {
this.room = room;
}
public Subject getSubject() {
return subject;
}
public void setSubject(Subject subject) {
this.subject = subject;
}
public Section getSection() {
return section;
}
public void setSection(Section section) {
this.section = section;
}
public boolean isLab() {
return lab;
}
public void setLab(boolean lab) {
this.lab = lab;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Schedule)) {
return false;
}
Schedule other = (Schedule) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "ph.edu.bulsusc.planner.entity.Schedule[ id=" + id + " ]";
}
@Override
public int compareTo(Schedule schedule) {
// return
// -1 ahead
// 0 overlapping
// 1 behind
// int timeComparison = compareTime(schedule);
// boolean isTimeConflict = timeComparison == 0;
//
// if (this.room.getId() == schedule.getRoom().getId() && !isTimeConflict) {
// // if they have same room and time is not conflict
// return timeComparison;
// } else {
// // same room; time conflict
// return 0;
// }
throw new UnsupportedOperationException("Not implemented yet.");
}
// private int compareTime(Schedule schedule) {
// if (this.day.compareTo(schedule.getDay()) < 0) { // ahead/before of scheduled day
// return -1;
// } else if (this.day.compareTo(schedule.getDay()) == 0) { // overlapping day
// if (this.endTime.get(Calendar.HOUR_OF_DAY) < schedule.getStartTime().get(Calendar.HOUR_OF_DAY)) {
// return -1;
// } else if (this.startTime.get(Calendar.HOUR_OF_DAY) > schedule.getEndTime().get(Calendar.HOUR_OF_DAY)) {
// return 1;
// } else {
// return 0;
// }
// } else { // behind/after of scheduled day
// return 1;
// }
// }
}
这是我的日程安排:
@NamedQuery(name = "Schedule.findUnusedRoomForCourseLectureOnly",
query = "SELECT r FROM Schedule s, Room r WHERE s.day = :sday AND (:stime NOT BETWEEN s.startTime AND s.endTime) AND r.id <> s.room.id")
@Entity
public class Schedule implements Serializable, Comparable<Schedule> {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "scheduledDay")
private int day;
@Temporal(javax.persistence.TemporalType.TIME)
private Calendar startTime; // 24 hr format
@Temporal(javax.persistence.TemporalType.TIME)
private Calendar endTime; // 24 hr format
@ManyToOne
private Faculty faculty;
@ManyToOne
private Room room;
@ManyToOne
private Subject subject;
private boolean lab;
@ManyToOne
private Section section;
public Schedule() {
this.startTime = Calendar.getInstance();
this.endTime = Calendar.getInstance();
}
public Schedule(int day, Calendar startTime, Calendar endTime, Faculty faculty, Room room, Subject subject, boolean lab, Section section) {
this.day = day;
this.startTime = startTime;
this.endTime = endTime;
this.faculty = faculty;
this.room = room;
this.subject = subject;
this.lab = lab;
this.section = section;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public int getDay() {
return day;
}
public void setDay(int day) {
this.day = day;
}
public Calendar getStartTime() {
return startTime;
}
public final void setStartTime(int hour) {
this.startTime.set(Calendar.HOUR_OF_DAY, hour);
this.startTime.set(Calendar.MINUTE, 0);
this.startTime.set(Calendar.SECOND, 0);
}
public Calendar getEndTime() {
return endTime;
}
public final void setEndTime(int hour) {
this.endTime.set(Calendar.HOUR_OF_DAY, hour);
this.endTime.set(Calendar.MINUTE, 0);
this.endTime.set(Calendar.SECOND, 0);
}
public Faculty getFaculty() {
return faculty;
}
public void setFaculty(Faculty faculty) {
this.faculty = faculty;
}
public Room getRoom() {
return room;
}
public void setRoom(Room room) {
this.room = room;
}
public Subject getSubject() {
return subject;
}
public void setSubject(Subject subject) {
this.subject = subject;
}
public Section getSection() {
return section;
}
public void setSection(Section section) {
this.section = section;
}
public boolean isLab() {
return lab;
}
public void setLab(boolean lab) {
this.lab = lab;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Schedule)) {
return false;
}
Schedule other = (Schedule) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "ph.edu.bulsusc.planner.entity.Schedule[ id=" + id + " ]";
}
@Override
public int compareTo(Schedule schedule) {
// return
// -1 ahead
// 0 overlapping
// 1 behind
// int timeComparison = compareTime(schedule);
// boolean isTimeConflict = timeComparison == 0;
//
// if (this.room.getId() == schedule.getRoom().getId() && !isTimeConflict) {
// // if they have same room and time is not conflict
// return timeComparison;
// } else {
// // same room; time conflict
// return 0;
// }
throw new UnsupportedOperationException("Not implemented yet.");
}
// private int compareTime(Schedule schedule) {
// if (this.day.compareTo(schedule.getDay()) < 0) { // ahead/before of scheduled day
// return -1;
// } else if (this.day.compareTo(schedule.getDay()) == 0) { // overlapping day
// if (this.endTime.get(Calendar.HOUR_OF_DAY) < schedule.getStartTime().get(Calendar.HOUR_OF_DAY)) {
// return -1;
// } else if (this.startTime.get(Calendar.HOUR_OF_DAY) > schedule.getEndTime().get(Calendar.HOUR_OF_DAY)) {
// return 1;
// } else {
// return 0;
// }
// } else { // behind/after of scheduled day
// return 1;
// }
// }
}
@实体
公共类调度实现了可序列化、可比较的{
私有静态最终长serialVersionUID=1L;
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私人长id;
@列(name=“scheduledDay”)
私人国际日;
@时态(javax.persistence.TemporalType.TIME)
私有日历开始时间;//24小时格式
@时态(javax.persistence.TemporalType.TIME)
私有日历结束时间;//24小时格式
@许多酮
私人教师;
@许多酮
包房;
@许多酮
私人主体;
私有布尔实验室;
@许多酮
私人组;
公共附表({
this.startTime=Calendar.getInstance();
this.endTime=Calendar.getInstance();
}
公共时间表(国际日、日历开始时间、日历结束时间、教员、会议室、主题、布尔实验室、部分){
this.day=天;
this.startTime=startTime;
this.endTime=endTime;
这个。系=系;
这个房间=房间;
this.subject=主语;
this.lab=实验室;
this.section=section;
}
公共长getId(){
返回id;
}
公共无效集合id(长id){
this.id=id;
}
public int getDay(){
回归日;
}
公共无效设定日(整数日){
this.day=天;
}
公共日历getStartTime(){
返回起始时间;
}
公共最终无效设置开始时间(整小时){
this.startTime.set(Calendar.HOUR\u OF_DAY,HOUR);
此.startTime.set(Calendar.MINUTE,0);
this.startTime.set(Calendar.SECOND,0);
}
公共日历getEndTime(){
返回结束时间;
}
公共最终无效设置结束时间(整小时){
this.endTime.set(Calendar.HOUR\u OF_DAY,HOUR);
this.endTime.set(Calendar.MINUTE,0);
this.endTime.set(Calendar.SECOND,0);
}
公共学院{
返回教师;
}
公共教育学院{
这个。系=系;
}
公共休息室{
返回室;
}
公共空间设置室(房间){
这个房间=房间;
}
公共主题getSubject(){
返回主题;
}
公共无效设置主体(主体){
this.subject=主语;
}
公共部分getSection(){
返回段;
}
公共无效设置部分(第节){
this.section=section;
}
公共布尔isLab(){
返回实验室;
}
公共void集实验室(布尔实验室){
this.lab=实验室;
}
@凌驾
公共int hashCode(){
int hash=0;
hash+=(id!=null?id.hashCode():0);
返回散列;
}
@凌驾
公共布尔等于(对象){
//TODO:警告-如果未设置id字段,此方法将不起作用
如果(!(计划的对象实例)){
返回false;
}
调度其他=(调度)对象;
如果((this.id==null&&other.id!=null)| |(this.id!=null&&!this.id.equals(other.id))){
返回false;
}
返回true;
}
@凌驾
公共字符串toString(){
返回“ph.edu.bulsusc.planner.entity.Schedule[id=“+id+”]”;
}
@凌驾
公共国际比较(时间表){
//返回
//-1领先
//0重叠
//1落后
//int timeComparison=比较时间(计划);
//布尔值isTimeConflict=timeComparison==0;
//
//if(this.room.getId()==schedule.getRoom().getId()&&!isTimeConflict){
////如果他们有相同的房间和时间,则不冲突
//返回时间比较;
//}其他{
////同一房间;时间冲突
//返回0;
// }
抛出新的UnsupportedOperationException(“尚未实现”);
}
//专用int比较时间(时间表){
//如果(this.day.compareTo(schedule.getDay())<0){//在计划日期之前/之前
//返回-1;
//}else if(this.day.compareTo(schedule.getDay())==0){//lapping day
//if(this.endTime.get(Calendar.HOUR OF_DAY)schedule.getEndTime().get(Calendar.HOUR OF_DAY)){
//返回1;
//}其他{
//返回0;
// }
//}否则{//在预定日期后/之后
//返回1;
// }
// }
}
这是我的房间实体:
@Entity
public class Room implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String number;
private boolean lab;
@OneToMany
private List<Course> prioritizedCourses;
@OneToMany
private List<Subject> prioritizedSubjects;
public Room() {
}
public Room(String number, boolean lab) {
this.number = number;
this.lab = lab;
}
public Room(String number, boolean lab, List<Course> prioritizedCourses, List<Subject> prioritizedSubjects) {
this.number = number;
this.lab = lab;
this.prioritizedCourses = prioritizedCourses;
this.prioritizedSubjects = prioritizedSubjects;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public boolean isLab() {
return lab;
}
public void setLab(boolean lab) {
this.lab = lab;
}
public List<Course> getPrioritizedCourses() {
return prioritizedCourses;
}
public void setPrioritizedCourses(List<Course> prioritizedCourses) {
this.prioritizedCourses = prioritizedCourses;
}
public List<Subject> getPrioritizedSubjects() {
return prioritizedSubjects;
}
public void setPrioritizedSubjects(List<Subject> prioritizedSubjects) {
this.prioritizedSubjects = prioritizedSubjects;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
// public List<Schedule> getSchedules() {
// return schedules;
// }
//
// /**
// * Rewrites schedule with this method
// * @param schedules
// */
// public void setSchedules(List<Schedule> schedules) {
// this.schedules = schedules;
// }
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Room)) {
return false;
}
Room other = (Room) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "ph.edu.bulsusc.planner.entity.Room[ id=" + id + " ]";
}
}
@实体
公共教室实现了可序列化{
私有静态最终长serialVersionUID=1L;
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私人长id;
私有字符串编号;
私有布尔实验室;
@独身癖
私人课程列表;
@独身癖
私有列表优先对象;
公共房间(){
}
公共房间(字符串编号,布尔实验室){
这个数字=数字;
this.lab=实验室;
}
公共房间(字符串编号、布尔实验室、列出优先级课程、列出优先级主题){
这个数字=数字;
this.lab=实验室;
this.priorizedCourses=priorizedCourses;
this.prioritizedSubjects=prioritizedSubjects;
}
公共长getId(){
返回id;
}
公共无效集合id(长id){
this.id=id;
}
公共布尔isLab(){
返回实验室;
}
公共void集实验室(布尔实验室){
this.lab=实验室;
}
公共列表getPrioritizedCourses(){
返回优先课程;
}
公共空集
"SELECT r FROM Room r WHERE not exists (SELECT s from Schedule s where :stime NOT BETWEEN s.startTime AND s.endTime) AND r = s.room))"