通常、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]