没有任何外键的一对多关联

时间:2013-06-03 07:54:12

标签: xml hibernate

我知道应该有一个PK和一个FK来正常关联两个表,但我处于一种我无法控制遗留系统架构的情况。

我的问题是我想在xxx.hbm.xml中建立一对多的关系,但没有任何关联的FK。但遗留代码“依赖”一组两列,这两列未被声明为复合PK或FK。
PaymentDelivery是一方,PaymentItemDelivery是多方。

我试过这个 在paymentDelivery.hbm.xml(单方面)

<bag 
        name="paymentItemDelivery"
        fetch="join"
        lazy="false"
        >
        <key>
            <column name="payment_id"></column>
            <column name="delivery_num"></column>
        </key>
        <one-to-many
            class="kr.co.sgis.services.web.mobile.payment.form.PaymentItemDelivery"
            />

</bag>

和其他方式,但它给我错误 列数必须与FK列匹配,否则我的FK列数量错误。 “但我告诉你Hibernate,他们不是FK!” 我也试过使用属性标签,但没有任何运气。使用属性标签也给我“集合元素映射有错误的列数”错误。

通过使用像

这样的注释,可以实现上述关联
JoinColumns

我如何对XML做同样的事情?
我也尝试过这个 在paymentDelivery.hbm.xml(一面)

<bag 
        name="paymentItemDelivery"
        fetch="join"
        lazy="false"
        >
        <key property-ref="logicalPaymentItemDeliveryAccosiation">

            </key>
            <one-to-many
                class="kr.co.sgis.services.web.mobile.payment.form.PaymentItemDelivery"
                />

        </bag>
<properties 
            insert="false"
            unique="false"
            update="false"
            name="logicalPaymentItemDeliveryAccosiation">

        <property 
            name="payment_id" 
            column="PAYMENT_ID" 
            insert="false" 
            unique="false" 
            update="false">
        </property>

    <property 
        name="delivery_num" 
        column="DELIVERY_NUM" 
        insert="false" 
        unique="false" 
        update="false">
    </property>
</properties>

和paymentItemDelivery.hbm.xml(多方)

<properties 
        insert="false"
        unique="false"
        update="false"
        name="logicalPaymentItemDeliveryAccosiation">
        <property 
            name="payment_id" 
            column="PAYMENT_ID" 
            insert="false" 
            unique="false" 
            update="false">

        </property>
        <property 
            name="delivery_num" 
            column="DELIVERY_NUM"
            insert="false" 
            unique="false" 
            update="false">

        </property>
    </properties>

它抛出

collection foreign key mapping has wrong number of columns: 
kr.co.sgis.services.web.mobile.payment.form.PaymentDelivery.paymentItemDelivery
type: component[payment_id,delivery_num]

1 个答案:

答案 0 :(得分:0)

好的,我有这个工作。

我使用了属性标签,我不得不在桌面上添加一个唯一的密钥!