2015-10-03 6 views
5

मैं कक्षा मीडिया से विरासत के साथ एक कक्षा सीडी है:अवहेलना में शामिल हो गए-विरासत जेपीए के साथ विदेशी कुंजी नाम/हाइबरनेट

सीडी:

@Entity 
public class CD extends Media { 
    ... 
} 

मीडिया:

@Entity(name = "media") 
@Inheritance(strategy = InheritanceType.JOINED) 
public abstract class Media extends PersistenceId<Long> { 
    ... 
} 

जेपीए स्वत: जनरेट करता एक विदेशी कुंजी नाम और मैं इसे जिस नाम से चाहता हूं उसे ओवरराइड करना चाहता हूं:

03-10 18: 16: 58.174 [मुख्य] ​​डीबग org.hibernate.SQL - बदल तालिका सीडी जोड़ने बाधा FK_ehd468g2cptgh6bq6sxe75xlf विदेशी कुंजी (आईडी) का संदर्भ मीडिया (आईडी)

कि कैसे करना है? मैंने कोशिश की:

@Entity 
@AssociationOverride(
    name = "id", 
    foreignKey = @ForeignKey(name = "fk_cd_media") 
) 
public class CD extends Media { 
    ... 
} 

और

@Entity 
@PrimaryKeyJoinColumn([email protected](name = "fk_cd_media")) 
public class CD extends Media { 
    ... 
} 

लेकिन यह काम नहीं करता।

यहाँ तालिका बनाने एसक्यूएल उत्पन्न होता है:

CREATE TABLE `cd` (
    `artist` varchar(255) DEFAULT NULL, 
    `year` int(11) NOT NULL, 
    `id` bigint(20) NOT NULL, 
    PRIMARY KEY (`id`), 
    CONSTRAINT `FK_ehd468g2cptgh6bq6sxe75xlf` FOREIGN KEY (`id`) REFERENCES `media` (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 

मैं चाहूँगा:

@Entity 
@PrimaryKeyJoinColumn([email protected](name = "fk_cd_media")) 
public class CD extends Media { 
    ... 
} 

समस्या आप है:

CONSTRAINT `fk_cd_media` FOREIGN KEY (`id`) REFERENCES `media` (`id`) 

उत्तर

2

आपका दूसरा प्रयास जाने का रास्ता है एक हाइबरनेट बग का सामना कर रहे हैं: https://hibernate.atlassian.net/browse/HHH-10352

संपादित करें: समस्या हल हो जाता है:

फिक्स संस्करण/एस: 5.0.10, 5.2.1, 5.1.1

संबंधित मुद्दे