[英]Hibernate doubles foreign key in one-to-many
我有一个名为Parent
父实体,它扩展了Base
实体,也有一个名为Children
子实体,并且Parent中有一对多关系,这意味着Set<Children>
,但是在Children
,parent被描述为Base
,因此休眠在子表中创建了两个外键,但是最令人讨厌的是-其中一个是DELETE-CASCADE,另一个不是,当我尝试删除父项时会导致错误, 我怎么能拥有一个外键密钥(与Parent
在Children
没有严格联系),或者至少在没有DELETE-CASCADE的情况下解决违反密钥的问题?
代码 (不是全部,只是相对的) :
Base.hbm.xml:
<class name="Base" table="controls">
<id name="id">
<subclass name="Parent" discriminator-value="Parent">
<set name="items" cascade="save-update, delete-orphan" order-by="orderNumber asc" lazy="false" inverse="true" sort="natural">
<key column="controlId" on-delete="cascade"/>
<one-to-many class="children"/>
</set>
</subclass>
</class>
Children.hbm.xml:
<class name="controls.FAQItem" table="faq_item">
<id name="id">
<generator class="native"/>
</id>
<many-to-one name="base" column="controlId"/>
</class>
Parent.java:
public class Parent extends Base{
private Set<Children> items;
//getters and setters
}
Children.class:
public class Children {
private Base base;
//getters and setters
}
错误:
Cannot delete or update a parent row: a foreign key constraint fails
(`db_cofp`.`children`, CONSTRAINT `FK3534269CB50AD2C` FOREIGN KEY (`controlId`)
REFERENCES `controls` (`id`))
显示创建表:*仅相对结束
KEY `FK3534269CC41202F7` (`controlId`),
KEY `FK3534269CB50AD2C` (`controlId`),
CONSTRAINT `FK3534269CB50AD2C` FOREIGN KEY (`controlId`) REFERENCES `controls` (`id`),
CONSTRAINT `FK3534269CC41202F7` FOREIGN KEY (`controlId`) REFERENCES `controls` (`id`) ON DELETE CASCADE
希望我能说明所有问题,请注意, Base
和Children
扩展了具有id的BasicEntity类,没有编写它,因为它只有int id
和getters和setters
通过将映射重写为:
Base.hbm.xml:
<class name="Base" table="controls">
<id name="id">
<subclass name="Parent" discriminator-value="Parent">
<set name="items" cascade="save-update, delete-orphan" order-by="orderNumber asc" lazy="false" sort="natural">
<key column="controlId"/>
<one-to-many class="children"/>
</set>
</subclass>
</class>
Children.hbm.xml:
<class name="controls.FAQItem" table="faq_item">
<id name="id">
<generator class="native"/>
</id>
<many-to-one name="base" column="controlId" class="Parent"/>
</class>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.