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);
但是,启动后,此代码不会改变任何内容。
删除关联的正确方法是什么?
您需要更新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); }
看起来你只需要打开Transitive持久性(例如,cascade = all-delete-orphan for“full”transitive。)
– 编辑感谢upvote,虽然Pascal准确地认为单独的级联不足以解决原始问题,但是关系的双方都没有得到管理。 教我匆匆回答:)
–
此外,一个名为Session的实体打破了我的大脑:(