Hibernate只读集合映射

Hibernate只读集合映射,hibernate,orm,collections,hibernate-mapping,readonly-collection,Hibernate,Orm,Collections,Hibernate Mapping,Readonly Collection,我将从中选取以下多对多映射示例: 而不是: public class Foo { public void addBar(Bar bar) { this.bars.add(bar); bar.foos.add(foo); // readonly } } 我的猜测是,我无法通过这种方式确保一致性(将Foo添加回栏)。Hibernate是否通过在我添加Foo.Bar时自动更新Bar.foos来保证这种一致性,或者Bar.foos集合在初始化后是静态的

我将从中选取以下多对多映射示例:

而不是:

public class Foo {
    public void addBar(Bar bar) {
        this.bars.add(bar);
        bar.foos.add(foo); // readonly
    }
}
我的猜测是,我无法通过这种方式确保一致性(将
Foo
添加回
)。Hibernate是否通过在我添加
Foo.Bar
时自动更新
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()
的返回值是否是我期望的值


我还没有找到相关的文档,所以一个指针会非常有用。

其中一个引用应该标记为
reverse=“true”
,而不是只读的

反向部分不由NH存储。但是,当然,当您处理这些对象时,内存中会出现一致性问题


查看参考文档,

以下是相关文档:。如果在打开DTD文件,您将发现集合中既没有角色也没有只读属性。您的文档可能已过时。使用参考文档。
public class Foo {
    public void addBar(Bar bar) {
        this.bars.add(bar);
        bar.foos.add(foo); // readonly
    }
}
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