您好,我正在阅读hibernate文档。
http://docs.jboss.org/hibernate/annotations/3.5/reference/zh/html/entity.html
使用@ManyToMany批注在逻辑上定义了多对多关联。您还必须使用@JoinTable批注描述关联表和联接条件。如果关联是双向的,则一侧必须是所有者,而一侧必须是反向端(即,在更新关联表中的关系值时,它将被忽略):
我了解除了最后一件事
(即,当更新关联表中的关系值时,它将被忽略)。
这是什么意思?例?
假设您具有以下实体:
@Entity public class Student { @ManyToMany private Set<Course> courses; ... } @Entity public class Course { @ManyToMany(mappedBy = "courses") private Set<Student> students; ... }
所有者方是Student(因为它没有mappedBy属性)。反面是Course((因为它具有mappedBy属性)。
mappedBy
如果您执行以下操作:
Course course = session.get(Course.class, 3L); Student student = session.get(Student.class, 4L); student.getCourses().add(course);
Hibernate将在连接表中为学生4和课程3添加一个条目,因为您更新了关联的所有者方(student.courses)。
student.courses
而如果您执行以下操作:
Course course = session.get(Course.class, 3L); Student student = session.get(Student.class, 4L); course.getStudents().add(student);
什么都不会发生,因为uou更新了关联(course.students)的反面,但忽略了更新所有者的面。Hibernate仅考虑所有者方。
course.students