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()
返回值是那些我期待?
我还找不到相关文档,所以指针会非常有帮助。
这里的相关文件:http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/。如果您在http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd打开DTD文件,您会发现集合中没有角色也没有只读属性。您的文档可能已过时。使用参考文档。 –