В моей базе данных у меня есть пользователи и UserGroups, которые имеют отношение «многие ко многим». Пользователь имеет набор UserGroup, объект домена UserGroup не видит пользователя.Как автоматически удалить ассоциации «многие-ко-многим» (каскад)
<class name="User" table="UserTable">
<set name="UserGroup" cascade="save-update" access="field.pascalcase-underscore" table="User2UserGroup">
<key column="User_Id" />
<many-to-many class="UserGroup" column="UserGroup_Id" />
</set>
...
То, что я пытаюсь достичь является NHibernate удалить корреляцию из таблицы перехода, когда я удалить группу пользователей пользователя или. Кроме того, пользователь и группа являются дочерними объектами, назовем его Домен. Домен делает cascade="all-delete-orphans"
, поэтому, когда домен удаляется, он каскад - удаляет все его Пользователи и UserGroups.
Обратно к пользователю < -> Отношение UserGroup: Если я правильно понимаю, я не могу использовать каскад любой формы, который включает удаление, поскольку я просто хочу удалить связь между двумя объектами, а не сам связанный объект. (Группа не исчезает, даже если она является сиротой. И пользователь без группы является действительной вещью в моем мире - он просто не имеет права вообще что-либо делать.)
Нужно ли мне смотреть события/перехватчики? Или я могу делать то, что хочу достичь, контролируя отображение?
Это может сработать, но я подозреваю, что это может создать массу проблем в кеше NHibernate. – froh42
AFAIK нет проблемы с использованием каскадного удаления в базе данных с NHibernate. Для обсуждения с помощью решения этого с прослушивателями событий (в NHibernate 2.1) проверить этот документ: http://elegantcode.com/2009/07/19/nhibernate-2-1-and-collection-event-listeners/ –
Майкл, спасибо за все вход и ссылку. Поскольку я уже просмотрел список слушателей событий (на самом деле, я уже продолжал регистрировать листингщик событий do-nothing в своем приложении), это направление, в котором я продолжу. Даже если база данных может удалять вещи за кулисами (что может быть даже намного быстрее), я предпочитаю не делать этого, так как хочу сохранить все на одном уровне. Из корней pre-nhibernate-2 моего приложения у меня все еще есть нездоровое количество SQL вместо исполняемого HQL. – froh42