2014-10-10 6 views
5

में ऑर्मेलाइट का उपयोग कर विदेशी कुंजी पर कैस्केड को हटाने के लिए कैसे करें I एंड्रॉइड में ऑर्मेलाइट का उपयोग कर रहा हूं और टेबल को सफलतापूर्वक बनाया है और डीएओ का उपयोग करके विभिन्न संचालन कर रहा है।एंड्रॉइड

लेकिन यदि प्राथमिक कुंजी मुख्य तालिका से हटा दी जाती है तो मैं विदेशी कुंजी पंक्ति को हटाने में फंस गया हूं।

मेरे पास अभिभावक और बच्चे नाम की दो सारणी हैं। माता-पिता के एक से अधिक बच्चे होते हैं इसलिए मैंने बच्चे को विदेशी कुंजी से जोड़ा।

कोड:
जनक तालिका:

@DatabaseField(id = true) 
private Integer id; 

@ForeignCollectionField(eager = false) 
private ForeignCollection<Child> childCollection; 

बाल तालिका:

@DatabaseField(id = true) 
private Integer id; 

@DatabaseField(foreign = true, foreignAutoRefresh = true, canBeNull = false, 
    index = true, columnDefinition = "INTEGER REFERENCES parent(id) ON DELETE CASCADE") 
private Parent parent; 

अब मैं एक विशेष आईडी के लिए माता-पिता पंक्ति को हटाने हूँ तो यह न हटाए बच्चे की मेज से बच्चे।

public void deleteById(Integer parentId) { 
    try { 
     Dao<Parent, Integer> parentDao = databaseHelper.getParentDao(); 
     parentDao .deleteById(parentId); 

    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
} 

कृपया मुझे मार्गदर्शन करें, जहां मैं गलत कर रहा हूं। मैंने कई बार कोशिश की है और Google को कोई भाग्य नहीं है।

उत्तर

2

शायद आपको पहले से ही समाधान मिल गया है, लेकिन किसी को इसकी आवश्यकता हो सकती है। BaseForeignCollection स्रोत कोड समाधान के अनुसार निम्नलिखित जा सकता है:

parent.getChildren().clear(); 
Dao<Parent, Integer> parentDao = databaseHelper.getParentDao(); 
parentDao.delete(parent); 

वास्तव में, आप अपने खुद के दाव माता-पिता के लिए हटाने की विधि इस तरह लागू करने और ओवरराइड कर सकते हैं:

@Override 
public int delete(final Parent data) throws SQLException { 
    data.getChildren().clear(); 
    return super.delete(data); 
} 

शायद, इस तरह के में पर्याप्त होगा मामलों।

1

आप constraint का उपयोग करना चाहिए, जैसे:

@DatabaseField ( 
    foreign = true, 
    foreignAutoRefresh = true, 
    canBeNull = false, 
    index = true, 
    columnDefinition = "INTEGER CONSTRAINT FK_NAME REFERENCES parent(id) ON DELETE CASCADE" 
) 
private Parent parent; 

पी.एस. मुझे पता है कि यह मृत पोस्ट उम्र बढ़ने 3 साल है :)

+0

स्टैक ओवरव्लो एक मंच नहीं है, नए उत्तरों का स्वागत है :) – m0skit0