Suppose you have the following entities:
@Entity
public class Student {
@ManyToMany
private Set<Course> courses;
...
}
@Entity
public class Course {
@ManyToMany(mappedBy = "courses")
private Set<Student> students;
...
}
The owner side is Student (because it doesn't have the mappedBy
attribute). The inverse side is Course ((because it has the mappedBy
attribute).
If you do the following:
Course course = session.get(Course.class, 3L);
Student student = session.get(Student.class, 4L);
student.getCourses().add(course);
Hibernate will add an entry for student 4 and course 3 in the join table because you updated the owner side of the association (student.courses
).
Whereas if you do the following:
Course course = session.get(Course.class, 3L);
Student student = session.get(Student.class, 4L);
course.getStudents().add(student);
nothing will happen, because uou updated the inverse side of the association (course.students
), but neglected to updated the owner side. Hibernate only considers the owner side.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…