Каскадное удаление многих ко многим - PullRequest
1 голос
/ 24 июня 2009

Я определил отношения многих ко многим между двумя классами. Событие и Персона (определены в отдельной таблице базы данных person_event). Теперь предположим, что я хочу удалить человека, поэтому все связанные с ним ассоциации также должны быть удалены из таблицы person_event. Другими словами, я хочу каскад НА УДАЛЕНИИ.

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 30 декабря 2009

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

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

0 голосов
/ 24 июня 2009

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

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

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