假设我们有教师表和学生表
一个老师,很多学生。
关系如下图
@Entity
@Table(name = "teacher")
public class Teacher {
@OneToMany(mappedBy="teacher")
private Set<Student> student = new HashSet<>();
}
}
@Entity
@Table(name = "student")
public class Student {
@ManyToOne
private Teacher teacher;
}
假设我们有一个这样的新学生:
Student student = new Student();
我需要像这样更新和保存老师和学生吗:
teacher.getStudent().add(student);
student.setTeacher(teacher);
teacherRepository.save(teacher);
studentRepository.save(student);
还是只救学生就可以了?
现在如果是多对多怎么办?
@Entity
@Table(name = "teacher")
public class Teacher {
@ManyToMany(mappedBy="teacher")
private Set<Student> student = new HashSet<>();
}
}
@Entity
@Table(name = "student")
public class Student {
@ManyToMany
@JoinTable(
name="teacher_student",
joinColumns = @JoinColumn(name = "teacher_id"),
inverseJoinColumns = @JoinColumn(name = "student_id")
)
private Set<Teacher> teacher = new HashSet<>();
}
我可以为此从学生方面保存吗?
如果您在从学生端保存之前也从教师端保存会怎样?
例如
teacherRepository.save(teacher)
student.setTeacher(teacher);
studentRepository.save(student);
对于
OneToMany
关系,你只需要更新和保存student对象,Hibernate会自动负责更新数据库中的关系。但是,如果您还想确保关系在内存中正确更新,您还可以将student添加到teacher的student集合并在student对象上设置teacher。
所以你可以这样做:
Student student = new Student();
student.setTeacher(teacher);
studentRepository.save(student);
对于
ManyToMany
关系,您也可以从student端保存,因为Hibernate会自动负责更新teacher的student集合。您可以通过以下方式进行:
Student student = new Student();
student.getTeacher().add(teacher);
studentRepository.save(student);
就我而言,我创建并使用了以下便捷方法。
@Entit
@Table(name = "student")
public class Student {
@ManyToOne
private Teacher teacher;
...
public void setTeacher(Teacher teacher) {
this.teacher = teacher;
teacher.getStudnet().add(this);
}
}