гибернация отношения один-ко-многим не обновляются корректно - PullRequest
2 голосов
/ 28 июля 2011

У меня есть две таблицы Item и Property, и один элемент может иметь несколько свойств. Я смоделировал это правильно (я думаю) в спящем режиме и при загрузке объекта ItemModel все свойства загружаются правильно.

Проблема в том, что когда я пытаюсь удалить свойства и затем сохранить их, свойства просто добавляются к существующим.

ItemModel m = ...;
m.getPropertySet().size() // returns 5 initially
m.getPropertySet().clear();
// some update function which adds properties
m.getPropertySet().size(); // returns 1
...currentSession().saveOrUpdate(m);

Что происходит, так как теперь в базе данных есть 6 свойств для этой категории вместо 1. Что я должен сделать, чтобы эта работа работала?

Модель отображения элемента в свойства выглядит примерно так

<set name="propertySet" cascade="all">
    <key column="item_id" not-null="true"/>
    <one-to-many class="Property"/>
</set>

1 Ответ

4 голосов
/ 28 июля 2011

Используйте cascade="all-delete-orphan". См. первый пример в справочном руководстве для ознакомления с подобными отношениями. Кроме того, если это двунаправленный один-ко-многим , то эта сторона (набор) должна быть сопоставлена ​​с inverse="true", чтобы отношение определялось исключительно на основе другой стороны отношения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...