38

フーには次のものがあります。

@ManyToMany(mappedBy = "foos")
private Set<Bar> bars

バーには次のものがあります。

@ManyToMany
private Set<Foo> foos

テーブルが foo_bar と呼ばれるか、bar_foo と呼ばれるかを除いて、mappedBy 属性の場所は双方向の関係にどのような違いをもたらしますか。また、mappedBy 属性がないと、foo_bar と bar_foo の両方の 2 つの結合テーブルが得られます。

4

2 に答える 2

47

ドキュメントには次のように記載されています。

アソシエーションが双方向の場合、一方が所有者であり、一方が逆側である必要があります (つまり、アソシエーション テーブルの関係値を更新するときに無視されます)。

なので、mappedBy属性を持っている側が逆側です。mappedBy属性を持たない側が所有者です。

所有者側は、どの関連付けが存在するかを知るために Hibernate が参照する側です。たとえば、Bar の foo のセットに Foo を追加すると、Hibernate によって結合テーブルに新しい行が挿入されます。逆に、Bar を Foo のバーのセットに追加すると、データベースでは何も変更されません。

于 2013-01-01T15:26:35.610 に答える
1

mappedBy関係のどちら側がリンクを「所有」しているかを Hibernate に伝えます。OneToManyまたはOneToOneで、 usingはmappyedBy、リンクを格納するために使用される他のテーブルに外部キーがあることを Hibernate に伝えます。

に関してManyToManyは、結合テーブルがあるため、どちらも他のオブジェクトへの直接のリンクを持っていません。ただし、休止状態は、操作をカスケードする方法を知っているという「所有」側がどちらであるかを知る必要があります。

于 2013-01-01T15:28:29.950 に答える