0

通常、2 つのテーブルを関連付けるために PK と FK が必要であることはわかっていますが、レガシー システムのアーキテクチャを制御できない状況にあります。

私の問題は、xxx.hbm.xml で 1 対多の関係が必要ですが、関連付ける FK がないことです。しかし、従来のコードは、複合 PK または FK として宣言されていない 2 つの列のセットに「依存」しています。
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]
4

1 に答える 1

0

わかりました、私はこれを機能させました。

プロパティ タグを使用し、テーブルに一意のキーを追加する必要がありました。

于 2013-06-03T10:23:54.723 に答える