10

こんにちは、休止状態のドキュメントを読んでいます。

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

多対多の関連付けは、@ManyToMany アノテーションを使用して論理的に定義されます。また、 @JoinTable アノテーションを使用して、関連付けテーブルと結合条件を記述する必要があります。アソシエーションが双方向の場合、一方が所有者であり、一方が逆側である必要があります (つまり、アソシエーション テーブルの関係値を更新するときに無視されます)。

私は最後のものを除いてすべてを理解しています

(つまり、関連付けテーブルの関係値を更新するときは無視されます)。

これは何を意味するのでしょうか?例?

4

2 に答える 2

30

次のエンティティがあるとします。

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

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

mappedBy所有者側は Student です (属性がないため)。逆側はコースです((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 は所有者側のみを考慮します。

于 2012-09-23T14:15:20.927 に答える