我在调用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);
}
这显然不是一个理想的解决方案。
有什么想法吗?
答案 0 :(得分:4)
仅使用以下配置Xml,仅存在一个不包含覆盖或扩展行为的自定义DefaultSaveEventListener
子类就足以触发此异常:
<event type="save-update">
<listener class="MyNamespace.MyCustomSaveEventListener, MyAssembly" />
</event>
我正在继续讨论in this question。
<强>更新强>
我错误地从DefaultSaveEventListener
而不是DefaultSaveOrUpdateEventListener
派生出来,改变超类让我的问题消失了。
答案 1 :(得分:2)
您是否尝试使用根聚合实体上的列表中的子对象?如果你是,你需要使用root,遍历孩子,进行更改,并保存 root ,而不是孩子。
答案 2 :(得分:2)
我遇到了类似的问题。
修复很简单:use ISession.Get()
而非ISession.Load()