Java 休眠多对多关系级联

Java 休眠多对多关系级联,java,hibernate,Java,Hibernate,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=

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>
<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);
最初,db在AB表中设置了3条记录

(1,100) 
(1,200) 
(1,300)
db中的最终结果应该是

(1,100) 
(1,200) 
应删除最后一行(1300)

非常感谢您的帮助

  • 沙阿

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

是的,这是丢失的链接之一,我还必须删除级联和reverse=“false”。就这样。
(1,100) 
(1,200)