Похоже, что он, вероятно, пытается вставить NULL в столбец parent_id в дочерней таблице, которая помечена как ненулевая. Есть две вещи, которые вы должны сделать, чтобы (вероятно) решить вашу проблему. Первый,
изменить
<property name="parentID" />
до
<many-to-one name="parentID" column="parent_id_column_name_here" not-null="true" />
Затем пометьте отношение как обратное (т. Е. Ребенок управляет состоянием отношения через свойство parentID), добавив inverse = "true" в пакет на родительском элементе, например:
<bag name="catergories" table="tb_calEvent_catergory" inverse="true" lazy="false" cascade="all">
<key column="parentID" foreign-key="id"/>
<one-to-many class="CalEvtCatergory"/>
</bag>
Кроме того, я не уверен, что отображение сумок правильное. В частности, атрибут внешнего ключа. Я не мог найти это в документации. NHibernate, вероятно, просто игнорирует это, но я бы избавился от этого. В общем случае двунаправленные отображения типа «один ко многим» должны выглядеть следующим образом:
<!-- Parent Table Mapping -->
...
<set name="Children" inverse="true" [(optional)cascade="all|save-update|etc"]>
<key column="parent_id" />
<one-to-many class="Child" />
</set>
...
<!-- Child Table Mapping -->
...
<many-to-one name="Parent" column="parent_id" not-null="true"/>
...
Если вы не указываете каскадирование, вы должны сохранять каждый объект отдельно.