0

この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
    }
}

私の推測では、その方法で一貫性を確保することはできません(にを追加し直しますFooBar。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()私が期待するものになりますか?

関連するドキュメントがまだ見つからなかったので、ポインターが非常に役立ちます。

4

1 に答える 1

0

inverse="true"参照の1つは、読み取り専用ではなく、マークする必要があります。

逆の部分はNHによって保存されません。ただし、もちろん、そのオブジェクトを操作すると、メモリ内で一貫性の問題が発生します。

リファレンスドキュメント、結合テーブルとの双方向の関連付け、多対多をご覧ください

于 2011-08-30T06:37:08.243 に答える