2013-11-20 9 views
6

का उपयोग कैसे करें greendao FAQ में यह कहता है "ग्रीनडाओ से शुरू करना स्ट्रिंग प्राथमिक कुंजी के लिए सीमित समर्थन है।" http://greendao-orm.com/documentation/technical-faq/greendao स्ट्रिंग प्राथमिक कुंजी -

मैं कहीं भी नहीं ढूंढ सकता जो कहता है कि यह कैसे करें।

मैं सर्वर अनुप्रयोग में अपनी प्राथमिक कुंजी के रूप में Guids का उपयोग कर रहा हूं, और एक एंड्रॉइड डिवाइस से दूरस्थ रूप से नया डेटा जेनरेट करने और सर्वर पर इसे अपलोड करने में सक्षम होना चाहता हूं। एंड्रॉइड डिवाइस पर डेटाबेस एसक्लाइट में है और पीओजेओ और डेटा एक्सेस लेयर उत्पन्न करने के लिए ग्रीनडाओ का उपयोग करता है। मैं सर्वर पर डेटा अपलोड होने पर प्राथमिक कुंजी टकराव से बचने के लिए गइड्स का उपयोग कर रहा हूं। मैं ग्रिड को तारों के रूप में संग्रहीत कर रहा हूं।

greendao वेबसाइट पर कुछ और सलाह है जो कहती है कि मुझे स्ट्रिंग धारण करने वाला द्वितीयक क्षेत्र बनाना चाहिए और फिर भी greendao द्वारा समर्थित लंबी प्राथमिक कुंजी का उपयोग करना चाहिए, लेकिन इसका मतलब है कि जब मैं आयात करता हूं तो मुझे अपने सभी डेटाबेस संबंधों को दोबारा जोड़ना होगा सर्वर से डेटा को ऐप तक जो दर्द होता है। यदि संभव हो तो स्ट्रिंग प्राथमिक कुंजी का उपयोग करना जारी रखना होगा।

क्या कोई मुझे बता सकता है कि यह कैसे करें?

यहाँ कुछ उदाहरण कोड है ...

मेरी जनरेटर में (मैं स्पष्टता के लिए क्षेत्रों के सबसे को हटा दिया है):

private static void addTables(Schema schema) 
{ 
    Entity unit = addUnit(schema);  
    Entity forSale = addForSale(schema); 

    Property unitIntId = forSale.addLongProperty("unitIntId").getProperty(); 
    forSale.addToOne(unit, unitIntId); 
} 


private static Entity addForSale(Schema schema) 
{ 
    Entity thisEntity = schema.addEntity("ForSale"); 
    thisEntity.addIdProperty(); 
    thisEntity.addStringProperty("forSaleId");   
    thisEntity.addFloatProperty("currentPriceSqFt");   
    thisEntity.addStringProperty("unitId"); 
    return thisEntity; 
} 

private static Entity addUnit(Schema schema) 
{ 
    Entity thisEntity = schema.addEntity("Unit"); 
    thisEntity.addIdProperty(); 
    thisEntity.addStringProperty("unitId"); 
    thisEntity.addStringProperty("name"); 
    return thisEntity; 
} 

मेरी Android एप्लिकेशन में मैं से सभी डेटा डाउनलोड सर्वर। इसमें GUID आईडी के आधार पर संबंध हैं।

  //Add relations based on GUID relations 

      //ForSale:Units 
      for(ForSale forSale:Globals.getInstance().forSales) 
      { 
       if (forSale.getUnitId() != null && forSale.getUnit() == null) 
       { 
        for(Unit unit:Globals.getInstance().units) 
        { 
         if (forSale.getUnitId().equals(unit.getUnitId())) 
         { 
          forSale.setUnit(unit); 
          break; //only need the first one 
         } 
        } 
       } 
      } 

तो मैं ईद के जोड़ने सब कुछ, greendao के लिए पूर्णांक एक और स्ट्रिंग (GUID) एक है कि होगा के दो सेट होने अंत: मैं पूर्णांक ईद की मैं इस तरह जनरेटर में बनाया करने के लिए इन फिर से अनुलग्न करनी जब यह सर्वर पर वापस अपलोड हो जाता है काम करते हैं। एक आसान तरीका होना चाहिए!

+0

क्या आप पहले से ही कुछ कोशिश कर चुके थे? – AlexS

+0

@AlexS - मैंने ऊपर कुछ उदाहरण कोड जोड़ा है। कोई विचार? – BobbyG

+0

मैपिंग भी काम करता है? – AlexS

उत्तर

11

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

private static void addTables(Schema schema) { 
    Entity unit = addUnit(schema);  
    Entity forSale = addForSale(schema); 

    Property unitId = forSale.addStringProperty("unitId").getProperty(); 
    forSale.addToOne(unit, unitId); 
} 

private static Entity addForSale(Schema schema) { 
    Entity thisEntity = schema.addEntity("ForSale"); 
    thisEntity.addStringProperty("forSaleId").primaryKey();   
    thisEntity.addFloatProperty("currentPriceSqFt");   
    return thisEntity; 
} 

private static Entity addUnit(Schema schema) { 
    Entity thisEntity = schema.addEntity("Unit"); 
    thisEntity.addStringProperty("unitId").primaryKey(); 
    thisEntity.addStringProperty("name"); 
    return thisEntity; 
} 

मैं अगर Toone-मानचित्रण, हालांकि तार के साथ काम करेंगे पता नहीं है। यदि यह नहीं है कि आप संबंधित वस्तुओं को केप-सेक्शन में प्राप्त करने के लिए कुछ विधियां जोड़ सकते हैं।

+1

अद्भुत! .primaryKey() जवाब था। टू मैप मैपिंग ठीक काम किया। मैंने कई मानचित्रणों में से एक को भी आजमाया जिसने सही तरीके से काम किया (केवल उचित जगहों पर स्ट्रिंग को बदलना है)। इससे मुझे घंटे बचाया गया है या बॉयलरप्लेट कोड लिख रहा है। क्या आपको पता है कि एक और व्यापक मैनुअल कहां है क्योंकि मुझे इस पर कुछ भी नहीं मिला, वास्तव में वेबसाइट ने निहित किया है कि आप केवल लंबे समय तक उपयोग कर सकते हैं। मैं वर्तमान में केवल greendao वेबसाइट पर उदाहरण के लिए उदाहरण हैं। – BobbyG

+0

ग्रेट। मैंने पहले कोशिश नहीं की है और समय पर बहुत कम देखने के लिए बहुत कम था। दुर्भाग्य से मुझे greendao के लिए कोई अन्य मैनुअल नहीं पता है। कुछ उपयोगी संकेत और उदाहरण google-group greendao में पाए जा सकते हैं। मैं निश्चित रूप से जावडोक का भी उपयोग कर रहा हूं। सौभाग्य से greendao opensource है। यदि आप कुछ व्यवहार के बारे में सोच रहे हैं तो आप स्रोतों पर एक लॉक रख सकते हैं। चूंकि greendao प्रतिबिंब का उपयोग नहीं करता है, कोड बहुत सीधे आगे है। – AlexS

+0

मैं बिल्कुल उसी स्थिति में था कि बॉबीजी (मैं अपने एंड्रॉइड ऐप और मेरी वेबसाइट के बीच प्राथमिक कुंजी टकराव से बचने के लिए यूयूआईडी का उपयोग करता हूं)। मदद के लिए आपका बहुत बहुत धन्यवाद! स्ट्रिंग के रूप में प्राथमिक कुंजी के साथ सबकुछ ठीक है। – Guicara

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