Будьте в спящем режиме: удалите many-many ассоциацию

У меня есть две таблицы с many-many ассоциацией.

— Фрагмент DB:

загрузки
Идентификатор
Имя:

сессии
Идентификатор
Дата

sessionsloads
LoadId
SessionId

— Будьте в спящем режиме отображая фрагменты:

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

Но после запуска этот код ничего не изменяет.

Что правильный путь состоит в том, чтобы удалить ассоциацию?

9
задан Pascal Thivent 9 May 2010 в 14:03
поделиться

2 ответа

Вам необходимо обновить обе стороны ссылки между Load и Сессия :

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);
}
15
ответ дан 4 December 2019 в 10:30
поделиться

Похоже, вам просто нужно включить Transitive persistence (например, cascade=all-delete-orphan для "полного" transitive)

--. Редактировать Спасибо за поддержку, хотя Паскаль был точен в том, что одного каскада недостаточно, чтобы решить исходную проблему, но что обе стороны отношений не управлялись. Научите меня отвечать поспешно :)

--

Кроме того, сущность по имени Session сломала мне мозг :(

5
ответ дан 4 December 2019 в 10:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: