1

私はこのInstrumentエンティティを持っています:

<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 )の多対 1 の関係で使用されます。これは、多対 1 のマッピング情報です。

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

InstrumentSelectionエンティティをSaveで保存するときに発生した問題:

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

ログに次のエラーが表示されます。

2012-12-20 14:09:54,607 WARN 12 NHibernate.Engine.ForeignKeys - 識別子 11457 が割り当てられたインストゥルメントが一時的なものか切り離されたものかを判断できません。データベースのクエリ。これを防ぐには、セッションで明示的な Save() または Update() を使用します。

Instrument エンティティに関するいくつかの事実:

  • それは単なる参照エンティティです
  • それは不変の実体です
  • アプリからの追加・挿入はできません。外部フィードからデータベースの行を取得します。

質問 (バージョン 1) : 私の質問は: インストルメント エンティティを常に切り離されていると見なすように NHibernate に指示する方法はありますか? つまり、Instrument のインスタンスがアプリケーションに存在する場合、それはデータベースに存在することを意味します。したがって、データベースにクエリを実行する意味はあまりありません。

編集 1:質問 (バージョン 1)はまだ回答されていないため、少し変更させてください。

質問 (バージョン 2) : NHibernate がまだエンティティが分離/一時的であるかどうかを判断しようとしている動作は何ですか? マッピングが正しく構成されていると思います ( unsaved-valuegenerator )。

4

1 に答える 1

2

問題は、InstrumentSelection を保存するときに、NHibernate が子 Instruments を保存する操作をカスケードしていることです。私の最初の提案は、関係の InstrumentSelect 側でカスケードを none に設定することです。

私の 2 番目の提案は、この回答に示されているようにインターセプターを使用することです。

于 2012-12-28T02:03:14.273 に答える