6

我在调用 session.Save() 时不断收到 NHibernate.PersistentObjectException,这是由于传递给 save() 的未初始化代理。如果我摆弄我的级联设置,我可以让它消失,但子对象不会被保存。

我发现的唯一其他解决方法是将以下内容添加到我的 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

使用以下配置 XML,仅存在DefaultSaveEventListener不包含覆盖或扩展行为的自定义子类就足以触发此异常:

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

在这个问题上继续这个讨论。

更新:

我错误地派生自DefaultSaveEventListener而不是DefaultSaveOrUpdateEventListener,更改超类使这个问题对我来说消失了。

于 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 回答