许多对许多hibernate反面忽略了

pet*_*hel 9 hibernate jpa-2.0

您正在阅读hibernate文档.

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

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

除了最后一点,我理解一切

(即,在更新关联表中的关系值时将忽略它).

这是什么意思?例?

JB *_*zet 27

假设您有以下实体:

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

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

所有者方是学生(因为它没有mappedBy属性).反面是Course((因为它具有mappedBy属性).

如果您执行以下操作:

Course course = session.get(Course.class, 3L);
Student student = session.get(Student.class, 4L);
student.getCourses().add(course);
Run Code Online (Sandbox Code Playgroud)

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

如果您执行以下操作:

Course course = session.get(Course.class, 3L);
Student student = session.get(Student.class, 4L);
course.getStudents().add(student);
Run Code Online (Sandbox Code Playgroud)

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

  • 是的,您必须更新所有者端。只有一方可以是所有者。没有办法让它双向工作。 (2认同)