我知道应该有一个 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!”
我也尝试过使用属性标签,但没有任何运气。使用属性标签也给了我“集合元素映射的列数错误”错误。
通过使用 Annotations 可以实现上述关联
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]