删除参考self的实体

时间:2012-06-19 00:28:13

标签: nhibernate

我在消息线程中有一个消息类。每条消息都引用了线程的根消息:

<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实际上试图保存一个被删除的实体。有没有人知道如何处理这个?

1 个答案:

答案 0 :(得分:0)

not-null应该设置为false,因为这些条目中至少有一个需要它:第一个“父亲”。