I'm stuck with a problem in Java, hibernate (jpa) So, I have 2 classes: Class and Classroom, each one being entities
@Entity
@Table(name = "CLASSES")
public class Class {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="ID")
private Long id;
@Column(name = "TEACHER_ID")
private Long teacherId;
@Column(name = "NAME")
private String name;
@Column(name = "YEAR")
private Integer year;
@Column(name = "SECTION")
private String section;
}
@Entity
@Table(name = "CLASSROOMS")
public class Classroom {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Long id;
@Column(name = "NAME")
private String name;
@Column(name = "LOCATION")
private String location;
@Column(name = "CAPACITY")
private Integer capacity;
}
Also, I have another java class called Planner which connect these two classes (their tables - using classroom_id and class_id); I have a table for this Planner
@Entity
@Table(name = "PLANNERS")
public class Planner {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Long id;
@Column(name = "CLASSROOM_ID")
private Long classroomId;
@Column(name = "CLASS_ID")
private Long classId;
@Column(name = "STARTTIME")
private Time startTime;
@Column(name = "ENDTIME")
private Time endTime;
@Column(name = "DATA")
private Date date;
}
What I need: a new entity (or just output data) which will include all fields from PLANNERS, field NAME from CLASSES and field NAME from CLASSROOMS.
In SQL, this query is:
select M.classroom_id, M.class_id, M.starttime, M.endtime, M.data, CL.NAME AS "ROOM NAME (FROM CLASSROOMS)", C.NAME AS "COURSE NAME (FROM CLASSES)" FROM PLANNERS M INNER JOIN CLASSROOMS CL ON CL.ID = M.CLASSROOM_ID INNER JOIN CLASSES C ON C.ID = M.CLASS_ID
(inner join using classroom_id and class_id)
How can I do this on hibernate jpa? I want to get the objects (rows) returned by the above query. I searched a lot, I find about join column, other annotations (e.g. OneToMany etc) but I didn't succeed, so I need help