JPA之级联关系@OneToMany 和 @ManyToMany
1. 双向@OneToMany
@Entity
@Table(name = "TEACHER")
public class Teacher {
@Id
@GenericGenerator(name = "jpa-uuid", strategy = "uuid")
@GeneratedValue(generator = "jpa-uuid")
@Column(name = "teacher_id")
private String teacherId;
@OneToMany(mappedBy = "teacher", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<Student> students;
@Column(name = "teacher_name")
private String name;
@ManyToMany(mappedBy = "teachers")
private List<School> schools;
}
@Entity
@Table(name = "STUDENT")
public class Student {
@Id
@GenericGenerator(name = "jpa-uuid", strategy = "uuid")
@GeneratedValue(generator = "jpa-uuid")
@Column(name = "student_id")
private String studentId;
@Column(name = "student_name",length = 48)
private String name;
@Column(name = "student_age")
private int age;
@Column
private boolean gender;
@ManyToOne(cascade = {CascadeType.MERGE, CascadeType.REFRESH}, optional = false)
private Teacher teacher;
}
2. @ManyToMany和单向@OneToMany
@Entity
@Table(name = "SCHOOL")
public class School {
@Id
@GenericGenerator(name = "jpa-uuid", strategy = "uuid")
@GeneratedValue(generator = "jpa-uuid")
@Column(name = "class_id")
private String classId;
@Column(name = "class_name")
private String className;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "classroom_id")
private List<Student> students;
@ManyToMany
@JoinTable(name = "SCHOOL_TEACHER",joinColumns = @JoinColumn(name = "school_id"),
inverseJoinColumns = @JoinColumn(name = "teacher_id"))
private List<Teacher> teachers;
}