Сценарий таков:
У меня есть 3 объекта (я упростил имена) с именем Родитель, родительский ребенок и дочерний ребенок
дочерний элемент parent является набором parent, а дочерний элемент child является набором child.
отображение выглядит следующим образом (соответствующие части)
родитель
<set name="parentset"
table="pc-table"
lazy="false"
fetch="subselect"
cascade="all-delete-orphan"
inverse="true">
<key column=FK_ID_PC" on-delete="cascade"/>
<one-to-many class="parentchild,parentchild-ns"/>
</set>
родительский ребенок
<set name="childset"
table="cc-table"
lazy="false"
fetch="subselect"
cascade="all-delete-orphan"
inverse="true">
<key column="FK_ID_CC" on-delete="cascade"/>
<one-to-many class="childschild,childschild-ns"/>
</set>
Чего я хочу добиться, так это того, чтобы при удалении родителя происходил каскадный процесс удаления до самого ребенка. Но сейчас происходит следующее.
(это исключительно для целей картографического тестирования)
получение родительского объекта (работает нормально)
IQuery query = session.CreateQuery("from Parent where ID =" + ID);
IParent doc = query.UniqueResult<Parent>();
теперь удаляемая часть
session.Delete(doc);
transaction.Commit();
После устранения ошибки «невозможно вставить нулевое значение» с каскадом и инверсией, я надеюсь, теперь это удалит все с этим кодом, но удаляется только родительский элемент.
Я пропустил что-то в моем отображении, что, вероятно, будет пропущено? Любой намек в правильном направлении приветствуется!
Диего, спасибо за точный ответ. (и объяснение)
Я пошел с удалением on-delete="cascade"
, потому что мне нравится как можно больше контроля в коде, а не в базе данных.
Код, размещенный ниже, является (рабочим) результатом.
родитель
<set name="parentset"
table="pc-table"
cascade="all-delete-orphan"
inverse="true"
batch-size="5">
<key column=FK_ID_PC"/>
<one-to-many class="parentchild,parentchild-ns"/>
</set>
родительский ребенок
<set name="childset"
table="cc-table"
cascade="all-delete-orphan"
batch-size="5"
inverse="true">
<key column="FK_ID_CC">
<one-to-many class="childschild,childschild-ns"/>
</set>
Надеюсь, это поможет людям с такой же проблемой!