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

java – Hibernate:删除多对多关联

发布时间:2020-12-14 05:15:26 所属栏目:Java 来源:网络整理
导读:我有两个表与多对多关联. – DB片段: 负载 ID 名称 会议 ID 日期 sessionsloads LoadId SESSIONID – Hibernate映射片段: /* loads.hbm.xml */set name="sessions" table="sessionsloads" inverse="true" key column="LoadId" / many-to-many column="Sess
我有两个表与多对多关联.

– DB片段:

负载
ID
名称

会议
ID
日期

sessionsloads
LoadId
SESSIONID

– Hibernate映射片段:

/* loads.hbm.xml */
<set name="sessions" table="sessionsloads" inverse="true">
    <key column="LoadId" />
    <many-to-many column="SessionId" class="Session" />
</set>
…
/* sessions.hbm.xml */
<set name="loads" table="sessionsloads">
    <key column="SessionId" />
    <many-to-many column="LoadId" class="Load" />
</set>

为了从关联表sessionsloads中删除一个条目,我执行这个代码:

Session session = sessionDao.getObject(sessionId);
Load load = loadDao.getObject(loadId);

load.getSessions().remove(session);
loadDao.saveObject(load);

但是,在启动后,这段代码什么也没有改变.

删除协会的正确方法是什么?

解决方法

您需要更新Load和Session之间链接的两端:
Session session = sessionDao.getObject(sessionId);
Load load = loadDao.getObject(loadId);

load.getSessions().remove(session);
session.getLoads().remove(load);
loadDao.saveObject(load);

实际上,许多开发商使用防御性方法来管理双向关联.例如在Load中,您可以添加以下方法:

public void removeFromSessions(Session session) {
    this.getSessions().remove(session);
    session.getLoads().remove(this);
}
public void addToSessions(Session session) {
    this.getSessions().add(session);
    session.getLoads().add(this);
}

(编辑:李大同)

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

    推荐文章
      热点阅读