Существует следующая упрощенная отображение для одного из классов объектов:каскадных удаления для дополнительного обратнога присоединяется
<class name="Parent" table="tParent">
<id name="Id">
<column name="ParentId" sql-type="bigint"/>
<generator class="native"/>
</id>
<join table="tOneToOneComponent" optional="true" inverse="true">
<key column="ParentId" on-delete="cascade"/>
<property name="Someprop"/>
</join>
</class>
В принципе, это один-к-одному с внешним ключом с другой стороны отношения (это почему мы устанавливаем «обратный»). Кроме того, у родителя могут быть какие-либо записи в tOneToOneComponent (так что необязательно = «true»).
Я знаю, что такие объединения не рекомендуются, но у нас есть немного старая и большая система, и у нас нет времени на ее редизайн.
Мы хотели бы, чтобы NHibernate удалял связанный с ним компонент TOneToOneComponent при удалении родителя.
Конечно, мы могли бы каскадировать операцию удаления на SQL-сервере, но тогда нам нужно очистить кеш-память NHibernate, чтобы гарантировать, что tOneToOneComponent не останется где-то в кеше.
Таким образом, мы добавили на удаление = «каскад» к, но теперь, когда мы удаляем Родитель, SQL говорит:
The DELETE statement conflicted with the REFERENCE constraint
кажется, NHibernate пытается удалить записи в неправильном порядке.
Как сообщить NHibernate сначала удалить tOneToOneComponent (если он существует) и только потом удалить родителя?