在我的应用程序中,我有如下设置:
class A {
String id;
List<C> list;
}
class B {
String id;
List<C> list;
}
class C {
String id;
}
它在休眠中映射,例如
<class name="A" lazy="false">
<id name="id">
<generator class="org.hibernate.id.UUIDGenerator"/>
</id>
<list name="list" lazy="false" mutable="false">
<key column="listA_id"/>
<list-index column="listA_index"/>
<many-to-many class="C"/>
</list>
</class>
<class name="B" lazy="false">
<id name="id">
<generator class="org.hibernate.id.UUIDGenerator"/>
</id>
<list name="list" lazy="false" mutable="false">
<key column="listB_id"/>
<list-index column="listB_index"/>
<many-to-many class="C"/>
</list>
</class>
<class name="C" lazy="false">
<id name="id">
<generator class="org.hibernate.id.UUIDGenerator"/>
</id>
</class>
所有 5 个表(每个类一个,多对多关系 2 个)按预期创建。当我执行如下代码时出现问题:
A a = new A();
B b = new B();
C c1 = new C();
C c2 = new C();
C c3 = new C();
<hibernatesession>.save(c1);
<hibernatesession>.save(c2);
<hibernatesession>.save(c3);
a.list.add(c1);
a.list.add(c2);
<hibernatesession>.save(a);
b.list.add(c1);
b.list.add(c3);
<hibernatesession>.save(b);
我在 HSQL 日志文件中跟踪生成的 SQL,发现一切都很好,直到最后一次保存。保存 b 将导致 a 和 c1 之间的关联从 many-many-tabel A_list 中删除。从数据库中重新获取对象 a 和 b 将导致 c1 和 c3 在 b.list 中,但只有 c2 在 a.list 中。
观察: * 游戏中没有级联。* 切换保存 a/b 的顺序将导致 c1 从先保存的列表中删除。* 两个列表都映射到索引。* 两个列表都使用不同的键/索引列名称进行映射。* hibernate 完全删除列表共有的那些元素
有人可以向我解释这种休眠行为并知道如何正确实现相应的映射吗?
提前谢谢!!!猪蹄草