【发布时间】:2011-08-01 09:53:05
【问题描述】:
我正在从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>
一个Foo有几个bars,一个Bar有几个foos。
因为 Bar.foos 被声明为 readonly,我想我只需要这个简单的方法:
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() 的返回值会是我所期望的吗?
我还没有找到相关的文档,所以一个指针会很有帮助。
【问题讨论】:
-
这里是相关文档:docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single。如果您在hibernate.org/dtd/hibernate-mapping-3.0.dtd 打开DTD 文件,您会发现集合中没有角色或只读属性。您的文档可能已过时。使用参考文档。
标签: hibernate orm collections hibernate-mapping readonly-collection