一尘不染

多对多hibernate反面被忽略

hibernate

您好,我正在阅读hibernate文档。

http://docs.jboss.org/hibernate/annotations/3.5/reference/zh/html/entity.html

使用@ManyToMany批注在逻辑上定义了多对多关联。您还必须使用@JoinTable批注描述关联表和联接条件。如果关联是双向的,则一侧必须是所有者,而一侧必须是反向端(即,在更新关联表中的关系值时,它将被忽略):

我了解除了最后一件事

(即,当更新关联表中的关系值时,它将被忽略)。

这是什么意思?例?


阅读 281

收藏
2020-06-20

共1个答案

一尘不染

假设您具有以下实体:

@Entity
public class Student {
    @ManyToMany
    private Set<Course> courses;
    ...
}

@Entity
public class Course {
    @ManyToMany(mappedBy = "courses")
    private Set<Student> students;
    ...
}

所有者方是Student(因为它没有mappedBy属性)。反面是Course((因为它具有mappedBy属性)。

如果您执行以下操作:

Course course = session.get(Course.class, 3L);
Student student = session.get(Student.class, 4L);
student.getCourses().add(course);

Hibernate将在连接表中为学生4和课程3添加一个条目,因为您更新了关联的所有者方(student.courses)。

而如果您执行以下操作:

Course course = session.get(Course.class, 3L);
Student student = session.get(Student.class, 4L);
course.getStudents().add(student);

什么都不会发生,因为uou更新了关联(course.students)的反面,但忽略了更新所有者的面。Hibernate仅考虑所有者方。

2020-06-20