首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >hibernate多到多关系级联

hibernate多到多关系级联
EN

Stack Overflow用户
提问于 2011-06-10 16:41:44
回答 1查看 666关注 0票数 4

对于hibernate,我有两个表A和B,它们由表AB(A_ID和B_ID)定义,外键引用A.A_ID和B.B_ID,在delete和update上级联。

我已经绘制了

a.hbm.xml有

代码语言:javascript
复制
<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有

代码语言:javascript
复制
<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

代码语言:javascript
复制
{
    "a_field1": "value1",
    "a_field2": "value2",
    "aId": 1,
    "bSet": [
        {
            "bId": 100
        },
        {
            "bId": 200
        }
   ],
    "a_field3": "value3"
}

最初,数据库是用AB表中的3条记录设置的。

代码语言:javascript
复制
(1,100) 
(1,200) 
(1,300)

数据库中的最终结果应该是

代码语言:javascript
复制
(1,100) 
(1,200) 

最后一行(1 300)应该删除。

任何帮助都是非常感谢的。

  • Shah
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-10 19:06:27

我的最佳猜测(您没有提供处理请求的服务器代码的任何示例)是,您只更新双向关联的一方。换句话说,您只是将该实例反序列化并进行合并。如果你得到一个新的A,你仍然需要合并A实例,但是你也需要加载所有A不再引用的B,并将A实例从他们的列表中删除,还需要查找所有被A引用的B,并将A添加到他们的列表中。这是代码中双向关系的危险之一。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6309510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档