加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – hibernate很多关系级联

发布时间:2020-12-15 02:26:15 所属栏目:Java 来源:网络整理
导读:休眠的新手我有两个表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 colum
休眠的新手我有两个表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对象作为带有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)

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

(1,200)

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

任何帮助是极大的赞赏.

>沙阿

解决方法

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读