【问题标题】:IStatelessSession insert object with many-to-oneIStatelessSession 多对一插入对象
【发布时间】:2011-03-23 15:12:53
【问题描述】:

我有通用映射

<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 进行批量插入。但是当我将城市对象设置为 NotSyncPrice 对象并调用 IStatelessSession 时,我遇到了奇怪的异常:

NHibernate.Impl.StatelessSessionImpl.get_Timestamp()

当它的 null 或 int 一切正常时。我尝试使用真正的 && 代理城市对象。但没有结果。怎么了:(请帮忙

【问题讨论】:

标签: c# nhibernate session insert


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我遇到了同样的问题。

    原因是其映射包含&lt;cache&gt; 元素的实体。

    这些实体主要用于 Web 应用程序。引入二级缓存是为了提高 Web 应用程序的性能。

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

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

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

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

    【讨论】:

    • 这为我节省了大量的调试时间。有可能改变 NHibernate 来处理这个问题。
    猜你喜欢
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    • 2012-05-18
    • 2017-02-12
    • 1970-01-01
    相关资源
    最近更新 更多