1

我正在尝试使用 StatelessSession 批量更新实体。

因为它是无状态的,NHibernate 不会在保存时自动级联子实体。

这很好,因为我不想对任何子实体进行任何更改。

不幸的是,保存后,NHibernate 抱怨:

“对象引用了未保存的瞬态实例 - 在刷新之前保存瞬态实例。类型:MyAssembly.MyRandomEntity,实体:Castle.Proxies.MyRandomEntityProxy”

当然,如果我尝试更新子实体,我会收到错误消息:

“没有持久性:Castle.Proxies.MyRandomEntityProxy”

如您所见,子实体是一个代理,因为它尚未加载。我不需要它,我不想更新它……但即使我这样做了,我也不确定我该怎么做。

知道如何解决这个问题,基本上告诉它忽略瞬态子实体吗?

更新

这是父对象上子实体的映射:

<many-to-one class="MyAssembly.Flight, MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" name="OutboundFlight">
  <column name="OutboundFlightId" />
</many-to-one>

这是子实体上的 Id 列:

<id name="Id" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" unsaved-value="0">
  <column name="FlightId" />
  <generator class="assigned" />
</id>
4

1 回答 1

1

它使用分配的生成器,该生成器使用“未保存的值”来了解实例是持久的还是瞬态的。也许数据库中真的有一个 id = 0 的 Flightobject?然后它将被创建为 Id = 0 的代理,这将被视为瞬态实例。

于 2011-09-05T13:59:21.793 回答