2012-11-12 11 views
6

का उपयोग कर "डिलीट कैस्केड पर" उत्पन्न करें मैं ईबीन का उपयोग कर रहा हूं और मुझे डीडीएल (डेटा परिभाषा भाषा) के रूप में "डिलीट कैस्केड पर" प्राप्त करने की आवश्यकता है - जो एनोटेशन करता है? मैंईबीन

कोशिश की, लेकिन है कि "पर प्रतिबंधित हटाना"/"हटाने पर प्रतिबंधित" डिफ़ॉल्ट परिवर्तन नहीं करता है देता है?

उत्तर

1

प्रयास करें इस

@OneToMany(mappedBy = "parent", cascade = javax.persistence.CascadeType.REMOVE) 
@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN) 
0

हाइबरनेट DDL (@OnDelete(action = OnDeleteAction.CASCADE))

उदाहरण के लिए में यह उत्पन्न करने के लिए के लिए आप क्रम में माता पिता के वर्ग पर @OnDelete एनोटेशन उपयोग करने की आवश्यकता:

@Entity 
class Parent { 
    /* id and some attributes */ 

    @OneToMany(mappedBy = "parent", cascade = {CascadeType.REMOVE}) 
    @ForeignKey(name = "FK_CHILD_PARENT") 
    @OnDelete(action = OnDeleteAction.CASCADE) 
    List<Child> children; 
} 

@Entity 
class Child { 
    /* id and some attributes */ 

    Parent parent; 
} 
0

हालांकि आपने डीडीएल के रूप में "डिलीट कैस्केड" पर पूछा है, लेकिन मेरे उत्तर में सॉफ्टवेयर स्तर शामिल है। ईबीन डीबी स्तर के कैस्केड उत्पन्न नहीं कर रहा है। इसके बजाए, यह सॉफ्टवेयर में कैस्केडिंग ऑपरेशन को संभालता है। मुझे लगता है कि यह एक अच्छा विकल्प है।

से देखें (avaje-ebeanorm-4.6.2.jar: com/avaje/ebeaninternal/सर्वर/जारी रहती है/DefaultPersister)

/** 
* Delete the bean. 
* <p> 
* Note that preDelete fires before the deletion of children. 
* </p> 
*/ 
private void delete(PersistRequestBean<?> request) { 

    DeleteUnloadedForeignKeys unloadedForeignKeys = null; 

    if (request.isPersistCascade()) { 
     // delete children first ... register the 
     // bean to handle bi-directional cascading 
     request.registerDeleteBean(); 
     deleteAssocMany(request); 
     request.unregisterDeleteBean(); 
    ... 

आप देख सकते हैं कि एक अनुरोध है अगर कैस्केड, तो पहले इसके बच्चे हटा दिए जाते हैं (शायद यह किसी भी तरह से रिकर्सिव है)।

मेरे पोस्टग्रे डीबी में, स्वचालित रूप से जेनरेट की गई विदेशी कुंजी बाधाओं में कोई कैस्केड नहीं होता है, लेकिन फिर भी डिलीट ऑपरेशन कैस्केड होते हैं।

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