作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
hibernate 新手 我有两个表 A 和 B,它们具有由表 AB(A_ID 和 B_ID)定义的多对多关系,外键引用 A.A_ID 和 B.B_ID 以及级联删除和更新定义。
我已经映射了
a.hbm.xml 有
<set name="bSet" table="AB" inverse="true" lazy="false" fetch="select" cascade="all">
<key>
<column name="A_ID" not-null="true" />
</key>
<many-to-many class="objectB" >
<column name="B_ID" not-null="true" />
</many-to-many>
</set>
b.hbm.xml有
<set name="aSet" table="AB" inverse="false" lazy="false" fetch="select" cascade="all">
<key>
<column name="B_ID" not-null="true" />
</key>
<many-to-many class="objectA">
<column name="A_ID" not-null="true" />
</many-to-many>
</set>
//ObjectA.java has
private Set<ObjectB> bSet = new HashSet<objectB>(0);
//ObjectB.java has
private Set<ObjectA> aSet = new HashSet<objectA>(0);
从前端将 A 对象作为 json 与 B 的集合发送,表 A 正在正确更新,而 AB 未受影响。
有人能指出我哪里错了吗?这是 JSON
{
"a_field1": "value1",
"a_field2": "value2",
"aId": 1,
"bSet": [
{
"bId": 100
},
{
"bId": 200
}
],
"a_field3": "value3"
}
最初数据库在AB表中设置了3条记录
(1,100)
(1,200)
(1,300)
数据库中的最终结果应该是
(1,100)
(1,200)
最后一行 (1,300) 应该已被删除。
非常感谢任何帮助。
最佳答案
我最好的猜测(您没有提供处理请求的服务器代码的任何示例)是您只更新双向关联的一侧。换句话说,您只是反序列化 A 实例并进行合并。如果你得到一个新的 A,你仍然需要合并 A 实例,但你还需要加载 A 不再引用的所有 B,并从它们的列表中删除 A 实例,并查找 A 新引用的所有 B并将 A 添加到他们的列表中。这是代码中双向关系的危害之一。
关于java - hibernate 多对多关系级联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6309510/
我是一名优秀的程序员,十分优秀!