java - Hibernate:删除多对多关联

标签 java hibernate orm many-to-many

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

— 数据库片段:

负载
编号
姓名

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

但是,启动后,这段代码没有任何改变。

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

最佳答案

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

关于java - Hibernate:删除多对多关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2783602/

相关文章:

java - Spring Boot 无法解析 View

php - Laravel 使用相同的值更新 mysql 字段

Django "group by"通过注释 : Get object from . value() 与 ID

database - openerp中的ORM搜索方法不区分大小写

java - 在我的 servlet 中调用 Store.connect 挂起

java - 更改 onClick Android 中的按钮图像

java - 如何防止在Spring Boot单元测试中执行import.sql

java - 有没有办法继承Hibernate的@Where注解?

java - instanceof 和泛型的编译错误

java - 使用条件和限制进行查询时出现 Hibernate 异常 'could not resolve property'