你需要使用
@EmbeddedId和
@Embeddable注释来解决此问题:
讲师班:
@Entity@Table(name="LECTURER")public class Lecturer {@oneToMany(fetch = FetchType.LAZY, mappedBy = "pk.lecturer", cascade=CascadeType.ALL)Set<LecturerCourse> lecturerCourses == new HashSet<LecturerCourse>();//all others properties Setters and getters are less relevant.}课程类别:
@Entity@Table(name="COURSE")public class Course {@oneToMany(fetch = FetchType.LAZY, mappedBy = "pk.course", cascade=CascadeType.ALL)Set<LecturerCourse> lecturerCourses == new HashSet<LecturerCourse>();//all others properties Setters and getters are less relevant.}讲师课程:
@Entity@Table(name = "lecturer_course")@AssociationOverrides({ @AssociationOverride(name = "pk.lecturer", joinColumns = @JoinColumn(name = "LECTURER_ID")), @AssociationOverride(name = "pk.course", joinColumns = @JoinColumn(name = "COURSE_ID")) })public class LecturerCourse { private LecturerCourseID pk = new LecturerCourseID(); @Column(name = "CAPACITY", nullable = false, length = 10) private String capacity; @EmbeddedId public LecturerCourseID getPk() { return pk; }}现在,主键:
@Embeddablepublic class LecturerCourseID implements java.io.Serializable { private Lecturer lecturer; private Course course; @ManyToOne public Stock getLecturer() { return lecturer; } public void setLecturer(Lecturer lecturer) { this.lecturer= lecturer; } @ManyToOne public Course getCourse() { return course; } public void setCourse(Course course) { this.course= course; }}现在,你的Main应该是这样的:
Lecturer lecturer1 = new Lecturer();Course math = new Course();LecturerCourse lecturer1math = new LecturerCourse();lecturer1math.setCapacity("capacity");lecturer1math.setLecturer(lecturer1);lecturer1math.setCourse(math);lecturer1.getLecturerCourses().add(lecturer1math);//saving objectsession.save(lecturer1);你需要确保标记为的类
@Embeddable应实现
Serializable标记接口。
希望能帮助到你。



