1、一对多:班级与学生
-
班级(Clazz):
@OneToMany(mappedBy = "clazz") private Set<Student> students = new HashSet<>();
-
学生(Student):
@ManyToOne @JoinColumn(name = "clazz_id") private Clazz clazz;
2、一对一:人与身份证
-
基于外键的一对一
- 人(Person):
@OneToOne @JoinColumn(name = "card_id") private IdCard card;
- 身份证(IdCard):
@OneToOne(mappedBy = "card") private Person person;
-
共享主键的一对一
- 人(Person):
@OneToOne @PrimaryKeyJoinColumn private IdCard card;
- 身份证(IdCard):
@Id @GeneratedValue(generator = "fk") @GenericGenerator(name="fk", strategy="foreign", parameters=@Parameter(name="property", value="person")) private Long id; @OneToOne(mappedBy = "card") private Person person;
3、多对多:学生与课程
-
生成中间表,不映射
- 学生(Student)
@ManyToMany @JoinTable(name="tbx_student_course", joinColumns= @JoinColumn(name="student_id"), inverseJoinColumns=@JoinColumn(name="course_id")) private Set<Course> courses = new HashSet<>();
- 课程(Course)
@ManyToMany(mappedBy = "courses") private Set<Student> studnets = new HashSet<>();
-
映射中间表(2个一对多)
- 学生(Student)
@OneToMany(mappedBy = "student") private Set<Score> cjs = new HashSet<>();
- 课程(Course)
@OneToMany(mappedBy = "student") private Set<Score> cjs = new HashSet<>();
- 成绩(Score:中间表)
@ManyToOne @JoinColumn(name = "student_id") private Student2 student; @ManyToOne @JoinColumn(name = "course_id") private Course2 course;