2009-06-24 2 views
1

Я определил много-много отношений между двумя классами. Событие и лицо (определенные в отдельной таблице базы данных person_event). Теперь предположим, что хочу удалить человека, поэтому все связанные с ним ассоциации с событиями также должны быть удалены из таблицы person_event. Другими словами, я хочу, чтобы каскад ON DELETE.Каскадное удаление многих-ко-многим

Давайте рассмотрим сценарий:

  • "события" таблица содержит три события, определенного по идентификатору = 1, 2, 3.
  • "Человек" таблица содержит два человека, определенных ID = 4, 5.
  • «стол«person_event содержащий ассоциации, как 1-4, 2-4, 3-5

Теперь предположим, что я удаляю событие 1, используя Hibernate.delete(), то не только это делает удалить событие1, и ассоциация person_event1-4, но также и человек4!

Проблема связана с идентификатором person4 другими таблицами и выбрасывает исключение из-за иностранных ограничений ... Как я могу настроить NHibernate для удаления только событий и ассоциаций person_event?

+0

Предлагаем вам изменить тег «nhibernate» на «hibernate», это не похоже на то, что имеет отношение к любым особенностям NHibernate. –

+0

Или используйте оба тега «hibernate» и «nhibernate». – yfeldblum

+0

Вы решили проблему? Если да, то как? –

ответ

0

Я не так опытен в спящем режиме, но я думаю, вы хотите удалить свое событие от любого связанного с ним человека через объекты person, прежде чем вы вызовете Hibernate.delete().

Это связано с проблемами жизни объекта, которые, я думаю, вы бы очень тщательно продумали. Например, если event1 связан с person1 и person2 и person4, и вы удаляете person1, вы, вероятно, будете не хотите, чтобы событие1 автоматически удалялось.

2

Я думаю, что если вы установите для параметра Каскад значение none на карте многих из многих, вы сможете получить то, что хотите.

Он удаляет только записи, относящиеся к событию, но не каскадирует эффект удаления для Лица.

Смежные вопросы