我有两个与多对多关联的表。
—数据库片段:
加载 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);
但是,启动后,此代码将保持不变。
删除关联的正确方法是什么?
您需要更新Load和之间的链接的两端Session:
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); }