我在信封和交易之间有一对一的关系。我使用主键关联映射它,如下所示:
<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
有 2 个 FK 都映射到T_ENVELOPE's PK (ENVELOPE_ID): TRANSACTION_ID
(如上所示)和OLD_DEPRECATED_TXN_ID
. 所以,我有 2 个 FKT_ENVELOPE
具有完全相同的值(信封的 id)。我怎样才能让 NHibernateENVELOPE_ID
不仅保存在其中,TRANSACTION_ID
而且还保存在其中OLD_DEPRECATED_TXN_ID
?
我希望我没有这个要求,但我正在处理遗留代码模式和代码。我知道我也可以做类似的事情:
- envelope.Save // 这会保存 Envelope 和 Transaction 的事务 ID,但不保存 OLD_DEPRECATED_TXN_ID
- 信封.transaction.old_deprecated_txn_id = 信封.id
- 信封.Save 但是,这会导致一次插入和一次更新。我如何只做一个插入?
这是一个例子:
T_ENVELOPE
----------
ENVELOPE_ID
1
9
121
T_TRANSACTION
-------------
TRANSACTION_ID | OLD_DEPRECATED_TXN_ID
1|1
9|9
121|121