gpt4 book ai didi

java - hibernate 多对多关系级联

转载 作者:搜寻专家 更新时间:2023-11-01 03:44:15 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com