There are entities Audience , Teacher , Group and Lecture . Lecture Entity contains one Audience , one Teacher and a multitude of Group . It is impossible with the help of annotations to configure the mapping, I shoveled a bunch of resources. What's wrong?
Essence Lecture :
@Entity @Table(name = "lectures") public class Lecture implements Serializable { private static final long serialVersionUID = -3427911934140231015L; @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "lecture_id") private Integer lectureID; @Column(name = "lecture_name", nullable = false, length = 20) private String lectureName; @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @PrimaryKeyJoinColumn private Audience audience; @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @PrimaryKeyJoinColumn private Teacher teacher; @OneToMany(fetch = FetchType.LAZY, mappedBy = "lecture", cascade = CascadeType.ALL) private List<Group> groups; @Temporal(TemporalType.DATE) @Column(name = "date", nullable = false, length = 7) private Calendar date; Essence Audience :
@Entity @Table(name = "audiences") public class Audience implements Serializable { private static final long serialVersionUID = -3557084992704136716L; @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "audience_id", unique = true, nullable = false) private Integer audienceID; @Column(name = "room_number", nullable = false) private Integer roomNumber; Teacher Entity:
@Entity @Table(name = "teachers") public class Teacher implements Serializable { private static final long serialVersionUID = -86518201656746014L; @Id @GeneratedValue (strategy = GenerationType.AUTO) @Column(name = "teacher_id", unique = true, nullable = false) private Integer teacherID; @Column(name = "first_name", nullable = false, length = 20) private String firstName; @Column(name = "last_name", nullable = false, length = 20) private String lastName; Entity Group :
@Entity @Table(name = "groups") public class Group implements Serializable { private static final long serialVersionUID = 2022725469824583686L; @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "group_id", unique = true, nullable = false) private Integer groupID; @Column(name = "group_name", nullable = false, length = 10) private String groupName; @ManyToOne(fetch = FetchType.LAZY) private Lecture lecture; @OneToMany(targetEntity=Student.class, fetch = FetchType.LAZY, mappedBy = "group", cascade = CascadeType.ALL) private List<Student> students; It turned out to adjust one to one Teacher , Audience and Lecture
@Entity @Table(name = "teachers") public class Teacher implements Serializable { private static final long serialVersionUID = -86518201656746014L; @Id @GeneratedValue (strategy = GenerationType.AUTO) @Column(name = "teacher_id", unique = true, nullable = false) private Integer teacherID; @Column(name = "first_name", nullable = false, length = 20) private String firstName; @Column(name = "last_name", nullable = false, length = 20) private String lastName; @OneToOne(fetch = FetchType.LAZY, mappedBy = "teacher", cascade = CascadeType.ALL) private Lecture lecture; @Entity @Table(name = "audiences") public class Audience implements Serializable { private static final long serialVersionUID = -3557084992704136716L; @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "audience_id", unique = true, nullable = false) private Integer audienceID; @Column(name = "room_number", nullable = false) private Integer roomNumber; @OneToOne(fetch = FetchType.LAZY, mappedBy = "audience", cascade = CascadeType.ALL) private Lecture lecture; @Entity @Table(name = "lectures") public class Lecture implements Serializable { private static final long serialVersionUID = -3427911934140231015L; @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "lecture_id") private Integer lectureID; @Column(name = "lecture_name", nullable = false, length = 20) private String lectureName; @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @JoinColumn(name="audience_id") private Audience audience; @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @JoinColumn(name="teacher_id") private Teacher teacher;
ΠΎΠ΄ΠΈΠ½-ΠΊ-ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈ ΠΎΠ΄ΠΈΠ½-ΠΊΠΎ-ΠΌΠ½ΠΎΠ³ΠΈΠΌprinciple in both classes. All because when you ship in a classLecturegroup, in eachGroupthere is aLecturefield with the same groups. it will be infinite. Do eitherLecturehave groups, orGrouphaveLecture. - TsyklopStudent? - Tsyklop