繁体   English   中英

Hibernate一对多地将外键翻倍

[英]Hibernate doubles foreign key in one-to-many

我有一个名为Parent父实体,它扩展了Base实体,也有一个名为Children子实体,并且Parent中有一对多关系,这意味着Set<Children> ,但是在Children ,parent被描述为Base ,因此休眠在子表中创建了两个外键,但是最令人讨厌的是-其中一个是DELETE-CASCADE,另一个不是,当我尝试删除父项时会导致错误, 我怎么能拥有一个外键密钥(与ParentChildren没有严格联系),或者至少在没有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

希望我能说明所有问题,请注意, BaseChildren扩展了具有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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM