我从这个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 是否通过Bar.foos
在我添加时自动更新来保证这种一致性Foo.bars
,或者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()
会是我期望的吗?
我还找不到相关的文档,所以一个指针会很有帮助。