2017-02-16 73 views
0

雙打外鍵我有父實體,例如命名爲Parent,它擴展Base實體,我也有孩子實體命名Children,有關係的一個一對多的家長,這意味着Set<Children> ,但在Children中,parent被描述爲Base,因此hibernate在子表中創建了兩個外鍵,但是最煩人的是 - 其中一個是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> 

家長。 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,di擴展BasicEntity類dn't寫它,因爲它只是int id和getter和setter

+0

我知道我可以刪除另一個鍵,一切都會正常工作,但我想這不是正確的方法 –

回答

0

通過重寫映射來解決:

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>