gpt4 book ai didi

java - Hibernate 在一对多中加倍外键

转载 作者:行者123 更新时间:2023-11-29 19:23:57 25 4
gpt4 key购买 nike

我有父实体,例如名为 Parent ,它延伸Base实体,我还有名为 Children 的子实体,Parent 中有一对多的关系,即Set<Children> ,但是在 Children ,父级被描述为 Base ,因此 hibernate 在子表中创建了两个外键,但最烦人的是 - 其中一个是 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
}

child 类(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

希望我展示了所有重要的内容,请注意 BaseChildren使用 id 扩展 BasicEntity 类,没有编写它,因为它只有 int id以及 getter 和 setter

最佳答案

通过重写映射来解决:

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>

关于java - Hibernate 在一对多中加倍外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42271790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com