Ste*_*ing 11 nhibernate one-to-one
我有一个现有的数据库,里面有表Transactions.我添加了一个名为TransactionSequence的新表,其中每个事务最终只有一个记录.我们使用序列表来计算给定帐户的交易.我已将其映射为一对一映射,其中TransactionSequence具有TransactionId的主键.
约束是事务表上有一个而不是触发器,不允许更新已取消或已发布的事务.
因此,当计算序列并保存事务时,NHibernate会尝试发送事务更新,如'UPDATE Transaction SET TransactionId =?WHERE TransactionId =?'.但由于触发因此失败.如何配置我的映射,以便在插入新的TransactionSequence表时NHibernate不会尝试更新Transaction表?
交易映射:
<class name="Transaction" table="Transaction" dynamic-update="true" select-before-update="true">
<id name="Id" column="ID">
<generator class="native" />
</id>
<property name="TransactionTypeId" access="field.camelcase-underscore" />
<property name="TransactionStatusId" column="DebitDebitStatus" access="field.camelcase-underscore" />
<one-to-one name="Sequence" class="TransactionSequence" fetch="join"
lazy="false" constrained="false">
</one-to-one>
</class>
Run Code Online (Sandbox Code Playgroud)
和序列映射:
<class name="TransactionSequence" table="TransactionSequence" dynamic-update="true">
<id name="TransactionId" column="TransactionID" type="Int32">
<generator class="foreign">
<param name="property">Transaction</param>
</generator>
</id>
<version name="Version" column="Version" unsaved-value="-1" access="field.camelcase-underscore" />
<property name="SequenceNumber" not-null="true" />
<one-to-one name="Transaction"
class="Transaction"
constrained="true"
foreign-key="fk_Transaction_Sequence" />
</class>
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激...
jon*_*nii 15
nhibernate中的一对一映射不会像您认为的那样工作.它的设计使你有两个类,当它们持久化到相应的表时,它们具有相同的主键.
但是你可以让它工作,但它并不漂亮.我将告诉你如何提供一些替代方案:
在您的Transaction hbml中:
<one-to-one name="Sequence" class="TransactionSequence" property-ref="Transaction"/>
Run Code Online (Sandbox Code Playgroud)
在你的序列html中:
<many-to-one name="Transaction" class="Transaction" column="fk_Transaction_Sequence" />
Run Code Online (Sandbox Code Playgroud)
这应该做你想做的事.注意property-ref.
您要发布的下一个问题是询问您如何在一对一关联上进行延迟加载.答案是,你不能......你可以,但它可能无法奏效.问题是您在序列表上有外键,这意味着nhibernate必须访问数据库以查看目标是否存在.然后你可以尝试使用约束="真/假"来看看你是否可以说服懒惰地加载一对一的关联.
总而言之,这会浪费你的时间.
我建议:
从长远来看,这将为您省去很多麻烦.
归档时间: |
|
查看次数: |
19597 次 |
最近记录: |