0

私はこのHibernate Mapping Cheat Sheetから次多対多マッピング例を取っている: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> 

AはFooには、いくつかのbarsがあり、バーは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はFoo.barsを追加するたびに自動的にBar.foosを更新するか、一度初期化された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()の戻り値は、私が期待するものでしょうか?

私はそうポインタは非常に参考になる、まだ、関連するドキュメントを見つけることができませんでした。

+1

を参照ドキュメントを見てみましょう。 http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtdでDTDファイルを開くと、セット内にrole属性やreadonly属性がないことがわかります。あなたのドキュメントはおそらく時代遅れです。参照ドキュメントを使用します。 –

答えて

0

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

逆の部分はNHによって保存されません。しかし、もちろん、そのオブジェクトで作業するときに、メモリ内で一貫性の問題が発生します。 http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/:

はここで関連文書だ、Bidirectional associations with join tables, Many-to-many

関連する問題