このHibernateマッピングチートシートから次の多対多マッピングの例を取り上げています。
<class name="Foo" table="foo">
...
<set role="bars" table="foo_bar">
<key column="foo_id"/>
<many-to-many column="bar_id" class="Bar"/>
</set>
</class>
<class name="Bar" table="bar">
...
<set role="foos" table="foo_bar" readonly="true">
<key column="bar_id"/>
<many-to-many column="foo_id" class="Foo"/>
</set>
</class>
Fooにはいくつかbars
あり、Barにはいくつかありfoos
ます。Bar.foosは読み取り専用として宣言されているため、次の単純なメソッドが必要だと思います。
public class Foo {
public void addBar(Bar bar) {
this.bars.add(bar);
}
}
そしてではない:
public class Foo {
public void addBar(Bar bar) {
this.bars.add(bar);
bar.foos.add(foo); // readonly
}
}
私の推測では、その方法で一貫性を確保することはできません(にを追加し直しますFoo
)Bar
。Hibernateは、Bar.foos
を追加するたびに自動的に更新することで、この一貫性自体を保証しますかFoo.bars
、それともBar.foos
コレクションは初期化されると静的になりますか?
たとえば、これを行う場合:
Foo foo = new Foo();
Bar bar = new Bar();
bar.getFoos().size(); // expected to return 0
foo.addBar(bar);
bar.getFoos().size(); // expected to return 1
の戻り値はsize()
私が期待するものになりますか?
関連するドキュメントがまだ見つからなかったので、ポインターが非常に役立ちます。