我有两个具有多对多关联的表。
— 数据库片段:
负载
编号
姓名
session
编号
日期
session 负载
LoadId
session Id
— 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);
}
关于java - Hibernate:删除多对多关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2783602/