我知道应该有一个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]
答案 0 :(得分:0)
好的,我有这个工作。
我使用了属性标签,我不得不在桌面上添加一个唯一的密钥!