как удалить один-ко-многим дочерним элементам по родительскому идентификатору в HQL - PullRequest
0 голосов
/ 06 сентября 2010

У меня есть

class Parent
{
    IList<Child> Children;
}

class Child
{
}

При удалении Child мне нужно удалить все ссылки на него из любого Parents, который ссылается на него.

Как я могу это сделатьв NHibernate?

Нет Parent FK на Child, связь хранится в 3-й таблице «ссылок»

Спасибо

Ответы [ 2 ]

2 голосов
/ 06 сентября 2010

Это не родительско-дочерние отношения. Дети имеют только одного родителя (принадлежат родителю). Это отношение «многие ко многим» между независимыми организациями. Это важное отличие.

На самом деле вы не можете удалить «потомков» из «родителя» непосредственно в HQL, как это было задумано сейчас. Это ваши варианты:

  • загрузить «родителей» в память и удалить «ребенка» из списка.
  • Добавьте ссылку от «ребенка» обратно к «родителям». Сделайте другое отношение обратным. На самом деле он должен автоматически удалять элемент в таблице ссылок при удалении дочернего элемента, поскольку тогда ссылка будет принадлежать дочернему элементу.
  • Удалить ссылку, используя собственный SQL. Это не очень хорошо, но и не так уж плохо, потому что это стандартное решение SQL.
1 голос
/ 06 сентября 2010

Чтобы это произошло, должны быть какие-то отношения, начиная с дочерней сущности.

Тогда вы можете просто использовать cascade-delete для его 3d (я полагаю, это много-в-многих) стол.

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