如何使用具有不匹配列名的复合键映射join-subclass

时间:2013-06-26 09:25:37

标签: nhibernate

我有两张桌子,比如说:

PAYMENT
------------------------------
OrderId             INT    PK
PaymentId           INT    PK
Amount              FLOAT
ChildPaymentRowNum  INT

CARD_PAYMENT
------------------------------
OrderId             INT    PK
PaymentRowNum       INT    PK
CardType            STRING

CHEQUE_PAYMENT
------------------------------
OrderId             INT    PK
PaymentRowNum       INT    PK
CheckNumber         INT

不,我没有制作这个DB而且我不能改变它。我想将CARD_PAYMENTCHEQUE_PAYMENT映射为joined-subclass PAYMENT。这个模型与我发现的示例的不同之处在于,我使用的是复合键外表中的一个列名不匹配。

我认为如果它不是复合键我可以这样做:

<joined-subclass name="CardPayment" table="CARD_PAYMENT" extends="Payment">
    <key column="PaymentRowNum" foreign-key="ChildPaymentRowNum">
</joined-subclass>

如果在复合键上匹配的名称,我可以这样做:

<joined-subclass name="CardPayment" table="CARD_PAYMENT" extends="Payment">
    <key>
        <column="OrderId">
        <column="PaymentRowNum">
    </key>
</joined-subclass>

但是,虽然我想做这样的事情,但我很确定这是非法的:

<!-- NO GOOD -->
<joined-subclass name="CardPayment" table="CARD_PAYMENT" extends="Payment">
    <key>
        <column="OrderId" foreign-key="OrderId">
        <column="PaymentRowNum" foreign-key="ChildPaymentRowNum">
    </key>
</joined-subclass>

那么,我该怎么做呢?

奖励积分:如果您可以告诉我如何使用NHibernate.Mapping.Attributes,但如果没有,我可能会想出来。

1 个答案:

答案 0 :(得分:0)

foreign-key属性用于指定应由NHibernate模式生成工具创建的外键约束(不是列!)的名称。它在运行时对NHibernate没有影响。

为什么要在子类键中指定基类的键列名?甚至joined-subclass的NHibernate文档也在两个表中使用不同的列名:http://nhibernate.info/doc/nh/en/index.html#mapping-declaration-joinedsubclass