2010-05-18 14 views
7

मेरे पास बनाने के लिए hibernate.hbm2ddl.auto सेट है ताकि हाइबरनेट मेरे लिए mysql में टेबल बनाता है।हाइबरनेट कैस्केड उत्पन्न नहीं करता

हालांकि, ऐसा नहीं लगता है कि हाइबरनेट तालिका में संदर्भों पर Cascade सही ढंग से जोड़ता है। हालांकि यह उदाहरण के लिए काम करता है जब मैं एक पंक्ति को हटा देता हूं, और मेरे पास हाइबरनेट एनोटेशन के रूप में एक डिलीट कैस्केड है। तो मुझे लगता है कि इसका मतलब है कि हाइबरनेट रनटाइम पर एनोएशन पढ़ता है, और मैन्युअल रूप से कैस्केडिंग करता है?

क्या यह सामान्य व्यवहार है?

उदाहरण के लिए:

@Entity 
class Report { 
    @OneToOne(cascade = CascadeType.ALL) 
    public File getPdf() { 
    return pdf; 
} 
} 

यहाँ मैं सभी के लिए झरना निर्धारित किया है। हालांकि, show create table Report

Report | CREATE TABLE `Report` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT, 
    `pdf_id` bigint(20) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    KEY `FK91B14154FDE6543A` (`pdf_id`), 
    CONSTRAINT `FK91B14154FDE6543A` FOREIGN KEY (`pdf_id`) REFERENCES `File` (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 | 

चल रहा है जब यह अन्य तो विदेशी कुंजी व्यापक के बारे में कुछ नहीं कहा। मेरी राय में, यह जोड़ा जाना चाहिए था ON DELETE CASCADE ON DELETE UPDATE

उत्तर

5

CascadeType और @Cascade परिभाषाओं नहीं DDL में अनुवाद किया है, वे हाइबरनेट कैसे जब एक ऑपरेशन किया जाता है व्यवहार करने के लिए बताओ।

हालांकि, @OnDelete है कि आप माता-पिता पर डिस्काउंट कैस्केड क्लॉज पर उचित के साथ बनाई गई विदेशी कुंजी प्राप्त करने के लिए उपयोग कर सकते हैं।

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