IStatelessSession插入具有多对一的对象

时间:2010-06-09 03:28:47

标签: c# nhibernate session insert

我有共同的映射

<class name="NotSyncPrice, Portal.Core" table='Not_sync_price'>
<id name="Id" unsaved-value="0">
  <column name="id" not-null="true"/>
  <generator class="native"/>
</id>
<many-to-one name="City" class="Clients.Core.Domains.City, Clients.Core" column="city_id"
             cascade="none"></many-to-one>
<!--<property name="City">
  <column name="city_id"/>
</property>-->

我想使用IStatelessSession进行批量插入。但是当我将city对象设置为NotSyncPrice对象并调用IStatelessSession时,我有一个奇怪的例外:

NHibernate.Impl.StatelessSessionImpl.get_Timestamp()

当它的null或int all都可以。我尝试使用真实&amp;&amp;代理城市对象。但没有结果。怎么了:(请帮忙

2 个答案:

答案 0 :(得分:2)

这可能是因为可缓存的属性。如果您已将此实体或加载条件查询标记为可缓存,则无法使用无状态会话加载它。

答案 1 :(得分:2)

我遇到了同样的问题。

原因是其映射包含<cache>元素的实体。

这些实体主要用于Web应用程序。引入了二级缓存,以便在Web应用程序中引入性能。

但是一个独立的管理应用程序使用无状态会话和相同的实体使用相同的实体执行批量加载。 现在,无状态会话不适用于可缓存实体。

一个简单的解决方案是在管理应用程序中完全关闭二级缓存。 这可以通过编程方式或使用hibernate配置文件完成,方法是包含以下行:

<property name="cache.use_second_level_cache">false</property>

这解决了这个问题,无需删除映射文件中的<cache>元素或为管理应用程序创建单独的映射。