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文件,您會發現集合中沒有角色也沒有隻讀屬性。您的文檔可能已過時。使用參考文檔。 –

回答