一尘不染

休眠:删除多对多关联

hibernate

我有两个与多对多关联的表。

—数据库片段:

加载
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>

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

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

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

但是,启动后,此代码将保持不变。

删除关联的正确方法是什么?


阅读 218

收藏
2020-06-20

共1个答案

一尘不染

您需要更新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);
}
2020-06-20