1

我有这个仪器实体:

<class name="Instrument" table="Instruments" mutable="false">
    <id name="ID" column="INSTRUMENT_ID" unsaved-value="0">
        <generator class="assigned" />
    </id>
    <property name="....." />
    <property name="....." />
</class>

该实体用于其他实体( InstrumentSelection)中的多对一关系。这是多对一的映射信息:

<many-to-one name="Instrument" access="field.camelcase" column="Instrument_ID" update="false" class="Instrument" not-null="true" fetch="join" lazy="false" />

当我使用Save保存InstrumentSelection实体时,我遇到的问题是:

Transact(() => session.Save(entity));

我在日志中收到错误:

2012-12-20 14:09:54,607 WARN 12 NHibernate.Engine.ForeignKeys - 无法确定分配标识符为 11457 的仪器是暂时的还是分离的;查询数据库。在会话中使用显式 Save() 或 Update() 来防止这种情况。

关于 Instrument 实体的一些事实:

  • 它只是一个参考实体
  • 它是不可变的实体
  • 它不能通过应用程序添加/插入。我从外部提要获取数据库中的行。

问题(版本 1):我的问题是:有没有办法指示 NHibernate 始终将 Instrument 实体视为分离的?我的意思是-如果应用程序中存在 Instrument 的实例,则意味着它存在于数据库中。所以查询数据库没有太大意义。

编辑 1:因为问题(版本 1)还没有回答,让我稍微改变一下:

问题(第 2 版):NHibernate 仍在尝试确定实体是否分离/瞬态的行为可能是什么?我想我的映射配置正确(unsaved-valuegenerator)。

4

1 回答 1

2

问题是当您保存 InstrumentSelection 时,NHibernate 会级联操作以保存子 Instruments。我的第一个建议是在关系的 InstrumentSelect 端将级联设置为无。

我的第二个建议是使用拦截器,如this answer所示。

于 2012-12-28T02:03:14.273 回答