Hibernate:删除多对多关联

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

– 数据库片段:

负载
ID
名称

会议
ID
日期

sessionsloads
LoadId
SESSIONID

– Hibernate映射片段:

/* loads.hbm.xml */     … /* sessions.hbm.xml */     

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

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

但是,启动后,此代码不会改变任何内容。

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

您需要更新LoadSession之间链接的两端:

 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); } 

看起来你只需要打开Transitive持久性(例如,cascade = all-delete-orphan for“full”transitive。)

– 编辑感谢upvote,虽然Pascal准确地认为单独的级联不足以解决原始问题,但是关系的双方都没有得到管理。 教我匆匆回答:)

此外,一个名为Session的实体打破了我的大脑:(