6

session.Save() を呼び出すと、save() に渡された初期化されていないプロキシが原因で、NHibernate.PersistentObjectException が発生し続けます。カスケード設定をいじると、それを消すことができますが、子オブジェクトが保存されません。

私が見つけた他の唯一の修正は、DefaultSaveEventListener に以下を追加することです。

    protected override bool ReassociateIfUninitializedProxy(object obj, global::NHibernate.Engine.ISessionImplementor source)
    {
        if (!NHibernateUtil.IsInitialized(obj))
            NHibernateUtil.Initialize(obj);

        return base.ReassociateIfUninitializedProxy(obj, source);
    } 

これは明らかに理想的なソリューションではありません。

何か案は?

4

3 に答える 3

4

DefaultSaveEventListener次の構成 Xml を使用して、オーバーライドまたは拡張された動作を含まないカスタム サブクラスが存在するだけで、この例外をトリガーするのに十分です。

<event type="save-update">
    <listener class="MyNamespace.MyCustomSaveEventListener, MyAssembly" />
</event>

この質問でこの議論を続けています。

アップデート:

スーパークラスを変更すると、この問題が解消されましたDefaultSaveEventListenerDefaultSaveOrUpdateEventListener

于 2010-07-22T13:36:47.900 に答える
2

ルート集約エンティティのリストにある子オブジェクトを操作しようとしていますか?もしそうなら、あなたはルートで作業し、子にトラバースし、変更を加え、そして子ではなくルートを保存する必要があります。

于 2009-07-14T15:31:02.823 に答える
2

同様の問題がありました。

修正は簡単でした:use ISession.Get()そしてそうではありませんISession.Load()

于 2010-05-29T20:11:00.097 に答える