对于hibernate,我有两个表A和B,它们由表AB(A_ID和B_ID)定义,外键引用A.A_ID和B.B_ID,在delete和update上级联。
我已经绘制了
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)应该删除。
任何帮助都是非常感谢的。
发布于 2011-06-10 19:06:27
我的最佳猜测(您没有提供处理请求的服务器代码的任何示例)是,您只更新双向关联的一方。换句话说,您只是将该实例反序列化并进行合并。如果你得到一个新的A,你仍然需要合并A实例,但是你也需要加载所有A不再引用的B,并将A实例从他们的列表中删除,还需要查找所有被A引用的B,并将A添加到他们的列表中。这是代码中双向关系的危险之一。
https://stackoverflow.com/questions/6309510
复制相似问题