新手到休眠我有两个表A和B,它们有多个关系由表AB(A_ID和B_ID)定义,外键引用A.A_ID和B.B_ID,并在删除和更新定义上级联。 / p>
我已经映射了
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对象作为带有B的集合的json,表A在AB未被触及时正确更新。
有人可以指出我哪里错了吗? 这是JSON
{
"a_field1": "value1",
"a_field2": "value2",
"aId": 1,
"bSet": [
{
"bId": 100
},
{
"bId": 200
}
],
"a_field3": "value3"
}
最初,db在AB表中设置了3条记录
(1,100)
(1,200)
(1,300)
db中的最终结果应该是
(1,100)
(1,200)
应该删除最后一行(1,300)。
非常感谢任何帮助。
答案 0 :(得分:1)
我最好的猜测(您没有提供处理请求的服务器代码的任何示例)是您只更新双向关联的一侧。换句话说,您只是反序列化A实例并进行合并。如果你得到一个新的A,你仍然需要合并A实例,但你还需要加载A不再引用的所有B,并从列表中删除A实例,并查找A新引用的所有B。并在其列表中添加A.这是代码中双向关系的危险之一。