Envelope と Transaction の間には 1 対 1 の関係があります。以下のように、主キーの関連付けを使用してマップしました。
<class name="Envelope" table="T_ENVELOPE">
<id name="EnvelopeId" column="ENVELOPE_ID"><generator class="identity"/></id>
<one-to-one class="Transaction" cascade="all" name="Transaction" />
</class>
<class name="Transaction" table="T_TRANSACTION">
<id name="TransactionID" column="TRANSACTION_ID" type="long"><generator class="foreign"><param name="property">Envelope</param></generator></id>
<one-to-one name="Envelope" class="Envelope" constrained="true" />
</class>
これは問題なく動作T_TRANSACTION
しますが、 T_ENVELOPE's PK (ENVELOPE_ID): TRANSACTION_ID
(上記のように) とOLD_DEPRECATED_TXN_ID
. したがって、T_ENVELOPE
まったく同じ値 (エンベロープの ID) を持つ 2 つの FK があります。NHibernate を保存するENVELOPE_ID
だけでTRANSACTION_ID
なく、保存する方法を教えOLD_DEPRECATED_TXN_ID
てください。
この要件がなければよかったのですが、レガシー コード スキーマとコードを扱っています。次のようなこともできることを知っています:
- Envelope.Save // これにより、エンベロープとトランザクションのトランザクション ID が保存されますが、OLD_DEPRECATED_TXN_ID は保存されません
- エンベロープ.トランザクション.old_deprecated_txn_id =エンベロープ.id
- Envelope.Save しかし、それは 1 回の挿入と 1 回の更新という結果になります。1 回だけ挿入するにはどうすればよいですか?
次に例を示します。
T_ENVELOPE
----------
ENVELOPE_ID
1
9
121
T_TRANSACTION
-------------
TRANSACTION_ID | OLD_DEPRECATED_TXN_ID
1|1
9|9
121|121