मुझे लगता है कि जवाब देने के लिए सबसे अच्छा तरीका यह भंडारण संरचनाओं में एक संक्षिप्त सिंहावलोकन है ...
सूचियाँ
कक्ष भंडारण सूचियों कि एक POJO के अंदर नेस्टेड का समर्थन नहीं करता। सूचियों को स्टोर करने का अनुशंसित तरीका विदेशी कुंजी दृष्टिकोण का उपयोग करना है। ऑब्जेक्ट्स की सूची को एक अलग तालिका में संग्रहित करें (इस मामले में एक छोटी ऑब्जेक्ट्स तालिका) उनके संबंधित मूल ऑब्जेक्ट (इस मामले में "big_object_id") के लिए एक विदेशी कुंजी के साथ। यह कुछ इस तरह देखना चाहिए ...
@Entity
public class BigObject {
@PrimaryKey
private int id;
private User user;
@Ignore
private List<SmallObject> smallObjects;
}
@Entity(foreignKeys = {
@ForeignKey(
entity = BigObject.class,
parentColumns = "id",
childColumns = "big_object_fk"
)})
public class SmallObject {
@PrimaryKey (autoGenerate = true)
private int id;
private String smallValue;
@ColumnInfo(name = "big_object_fk")
private int bigObjectIdFk
}
ध्यान दें कि हम List<SmallObject>
को @Ignore
annotaiton जोड़ लिया है के रूप में हम कमरे में दृढ़ता के दौरान क्षेत्र की अनदेखी करने के (के रूप में सूचियां समर्थित नहीं हैं) चाहते हैं। अब यह अस्तित्व में है कि जब हम डीबी से संबंधित छोटी वस्तुओं की हमारी सूची का अनुरोध करते हैं तो भी हम उन्हें पीओजेओ में स्टोर कर सकते हैं।
मेरे ज्ञान के लिए इसका मतलब यह होगा कि आप दो प्रश्न बना रहे हैं।
BigObject b = db.BigObjectDao.findById(bOId);
List<SmallObject> s = db.smallObjectDao.findAllSOforBO(bOId);
b.setsmallObjects(s);
ऐसा प्रतीत होता है एक छोटी हाथ @Relation
प्रकार कन्वर्टर्स
इन मामलों में आप किसी जटिल डेटा संरचना है कि बिना flattend किया जा सकता है के लिए कर रहे हैं के रूप में इस के लिए है कि वहाँ जानकारी खोना, और एक कॉलम में संग्रहीत। इसका एक अच्छा उदाहरण दिनांक वस्तु है। एक तिथि ऑब्जेक्ट जटिल है और इसमें बहुत सारे मूल्य हैं, इसलिए डेटाबेस में इसे संग्रहीत करना मुश्किल है। हम डेट ऑब्जेक्ट के मिली प्रस्तुति को निकालने और स्टोर करने के लिए एक प्रकार कनवर्टर का उपयोग करते हैं। इसके बाद हम मिलिस को एक तिथि ऑब्जेक्ट में परिवर्तित करते हैं जिससे हमारे डेटा को बरकरार रखा जाता है।
यह है जब आप अपने माता-पिता POJO में सभी नेस्टेड POJOs के क्षेत्रों लेने के लिए और एक तालिका में स्टोर करने के लिए उन्हें बाहर समतल करना चाहते हैं प्रयोग किया जाता है एंबेडेड। एक उदाहरण:
- name
- age
- location_x
- location_y
- DOB
भावना एंबेडेड में हर नेस्ट उद्देश्य यह है कि प्राथमिक शामिल के लिए आप समय बनाने प्रकार कन्वर्टर्स को बचाने के लिए मौजूद है:
- name
- age
- location
- x
- y
- DOB
..when इस संरचना एम्बेडेड के रूप में डेटाबेस में संग्रहीत किया जाएगा स्ट्रिंग, int, float, आदि जैसे फ़ील्ड टाइप करें ...
आम तौर पर, संस्थाएं व्यक्तिगत रूप से या सूचियों के रूप में, अन्य इकाइयों को कमरे में नहीं रखती हैं। वे अन्य संस्थाओं को * विदेशी कुंजी * पकड़ सकते हैं। और एक दृश्य मॉडल की तरह अन्य संरचनाएं, जो भी इकाइयों की आवश्यकता होती है, पकड़ सकते हैं। तो, '' BigObject' smallObjects' से छुटकारा और 'एक विदेशी कुंजी के रूप में userId' साथ user' की जगह' पाने के लिए की जरूरत है। 'उपयोगकर्ता' और 'SmallObject' के पास' BigObject' पर विदेशी कुंजी वापस होंगी। फिर, एक दृश्य मॉडल या कुछ है कि आप से पॉप्युलेट '@ Query' डीएओ तरीकों कि' BigObject', इससे संबंधित 'User', और इससे संबंधित' SmallObjects' को पुन: प्राप्त की स्थापना की। – CommonsWare