Nhibernate 将复合键映射到两个外键

Nhibernate 将复合键映射到两个外键,nhibernate,foreign-keys,composite,Nhibernate,Foreign Keys,Composite,我有以下两张桌子: Jobs -------- JobNo DivisionID NCRs -------- ID JobNo SpoilageJobNo DivisionID JobNo和DivisionID在Jobs表中组成了一个复合键(我知道,但不幸的是它必须是一个复合键,因为它实际上是一个从4个不同数据库中提取数据的视图),我需要将这个键连接到JobNo和BatterageJobNo上的NCRs表 我尝试了以下映射: <class name="Job" table="v_Job

我有以下两张桌子:

Jobs
--------
JobNo
DivisionID

NCRs
--------
ID
JobNo
SpoilageJobNo
DivisionID
JobNo和DivisionID在Jobs表中组成了一个复合键(我知道,但不幸的是它必须是一个复合键,因为它实际上是一个从4个不同数据库中提取数据的视图),我需要将这个键连接到JobNo和BatterageJobNo上的NCRs表

我尝试了以下映射:

<class name="Job" table="v_Jobs">
    <composite-id name="Key">
        <key-property name="JobNo"></key-property>
        <key-many-to-one name="Division" class="Division" column="DivisionID"/>
    </composite-id>

    <bag name="NCRs">
        <key>
            <column name="JobNo"></column>
            <column name="DivisionID"></column>
        </key>
        <one-to-many class="NCR"/>
    </bag>

    <bag name="SpoilageNCRs">
        <key>
            <column name="SpoilageJobNo"></column>
            <column name="DivisionID"></column>
        </key>
        <one-to-many class="NCR"/>
    </bag>
</class>

<class name="NCR" table="NCRs">
    <id name="ID">
        <generator class="identity"></generator>
    </id>

    <many-to-one name="Division"
                 class="Division"
                 column="DivisionID">
    </many-to-one>

    <many-to-one name="Job"
                 class="Job"
                 column="JobNo">
    </many-to-one>

    <many-to-one name="SpoilageJob"
                 class="Job"
                 column="SpoilageJobNo">
    </many-to-one>
</class>

但是我得到的错误是,外键(FK480F1031931B2CA4:NCRs[JobNo])必须与引用的主键(v_Jobs[JobNo,DivisionID])具有相同的列数。

这是Tom对他的问题的回答:

啊哈,我想我明白了。我已使用以下内容更新了NCR的映射:

<many-to-one name="Job" class="Job">
    <column name="JobNo"></column>
    <column name="DivisionID"></column>
</many-to-one>

<many-to-one name="SpoilageJob" class="Job">
    <column name="SpoilageJobNo"></column>
    <column name="DivisionID"></column>
</many-to-one>


更新中的映射应给出一个错误,因为DivisionID映射了两次否?否,它工作正常。大概是因为DivisionID被定义为多对一键中的一列,而不是其本身的属性?实际上,我在hbm文件中也有另一个分区映射。啊,复合钥匙的乐趣p尝试插入一个带有引用集的新NCR对象,如果它没有抛出IndexOutOfRangeExceptionAh,是的,你是对的,我在创建/更新NCR时确实遇到了这个问题。我刚刚做了一个肮脏的修复,为JobNo和BatterageJobNo创建了两个单独的属性映射,并用insert=“false”和update=“false”标记多对一映射。不是很优雅,但很管用。