0

我采取以下许多一对多映射例如从这个Hibernate Mapping Cheat Sheet休眠只读集合映射

<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> 

一个富有几个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 
    } 
} 

我的猜测是,我不能保证一致性,这样(将Foo加回Bar)。 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://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/。如果您在http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd打开DTD文件,您会发现集合中没有角色也没有只读属性。您的文档可能已过时。使用参考文档。 –

回答