我在消息线程中有一个消息类。每条消息都引用了线程的根消息:
<class name="Message">
...
<many-to-one name="Root" not-null="true"/>
</class>
<joined-subclass name="Comment" extends="Message">
...
</joined-subclass>
现在我要删除评论。除了根注释之外,这对所有人都适用。删除Root注释(Root属性指向消息本身)的根注释会产生以下异常:
NHibernate.PropertyValueException : not-null property references a null or transient value
at NHibernate.Engine.Nullability.CheckNullability(Object[] values, IEntityPersister persister, Boolean isUpdate)
at NHibernate.Event.Default.DefaultDeleteEventListener.DeleteEntity(IEventSource session, Object entity, EntityEntry entityEntry, Boolean isCascadeDeleteEnabled, IEntityPersister persister, ISet transientEntities)
at NHibernate.Event.Default.DefaultDeleteEventListener.OnDelete(DeleteEvent event, ISet transientEntities)
at NHibernate.Impl.SessionImpl.FireDelete(DeleteEvent event)
at NHibernate.Impl.SessionImpl.Delete(Object obj)
当我从NHibernate 3.0升级到3.3时,首先出现此错误。当我删除not-null
约束时,我得到一个SQL异常,指示违反了相应的列约束。现在我想知道为什么NHibernate实际上试图保存一个被删除的实体。有没有人知道如何处理这个?
答案 0 :(得分:0)
not-null应该设置为false,因为这些条目中至少有一个需要它:第一个“父亲”。