1

メッセージスレッドにメッセージのクラスがあります。各メッセージには、スレッドのルート メッセージへの参照があります。

<class name="Message">
  ...
  <many-to-one name="Root" not-null="true"/>
</class>

<joined-subclass name="Comment" extends="Message">
  ...
</joined-subclass>

今すぐコメントを削除したいです。これは、ルート コメント以外のすべてのコメントに対して正常に機能します。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 が実際に削除対象のエンティティを保存しようとするのはなぜだろうか。これに対処する方法を知っている人はいますか?

4

1 に答える 1

0

not-null は false に設定する必要があります。これは、これらのエントリの少なくとも 1 つ (最初の「父」) でそれが必要になるためです。

于 2012-06-28T09:36:39.177 に答える