2013-08-19 6 views
5

के लिए कई ORMLite मैं दो वर्गों है:कई संबंध एंड्रॉयड

UniteStratigraphique.java:

@DatabaseTable(tableName = "unitestratigraphique") 
    public class UniteStratigraphique { 
    public final static String ID_FIELD_NAME = "id"; 
     @DatabaseField(generatedId = true, columnName = ID_FIELD_NAME) 
     private int id; 
    // CAMPAGNES 
     @DatabaseField(foreign = true, foreignAutoRefresh = true) 
     private Campagne campagne; 
     @ForeignCollectionField 
     private ForeignCollection<Campagne> listeCampagnes; 

public UniteStratigraphique() {} 

    public Campagne getCampagne() { 
      return campagne; 
     } 

     public void setCampagne(Campagne campagne) { 
      this.campagne = campagne; 
     } 

     public ArrayList<Campagne> getListeCampagnes() { 
      ArrayList<Campagne> campagnesArray = new ArrayList<Campagne>(); 
      for (Campagne campagne : listeCampagnes) { 
       campagnesArray.add(campagne); 
      } 
      return campagnesArray; 
     } 

     public ForeignCollection<Campagne> getListeCampagnesForeign() { 
      return listeCampagnes; 
     } 

     public void setListeCampagnes(ForeignCollection<Campagne> listeCampagnes) { 
      this.listeCampagnes = listeCampagnes; 
     } 

    } 

Campagne.java:

@DatabaseTable(tableName = "campagne") 
public class Campagne { 
@DatabaseField(generatedId = true) 
    private int id; 
// UNITE STRATIGRAPHIQUE 
    @ForeignCollectionField 
    private ForeignCollection<UniteStratigraphique> listeUniteStratigraphique; 
    @DatabaseField(foreign = true, foreignAutoRefresh = true) 
    private UniteStratigraphique uniteStratigraphique; 
public Campagne() {} 

public ArrayList<UniteStratigraphique> getListeUniteStratigraphique() { 
     ArrayList<UniteStratigraphique> usArray = new ArrayList<UniteStratigraphique>(); 
     for (UniteStratigraphique us : listeUniteStratigraphique){ 
      usArray.add(us); 
     } 
     return usArray; 
    } 

    public ForeignCollection<UniteStratigraphique> getListeUniteStratigraphiqueForeign() { 
     return listeUniteStratigraphique; 
    } 

    public void setListeUniteStratigraphique(
      ForeignCollection<UniteStratigraphique> listeUniteStratigraphique) { 
     this.listeUniteStratigraphique = listeUniteStratigraphique; 
    } 

    public int getSizeListeUniteStratigraphique() { 
     return listeUniteStratigraphique.size(); 
    } 

    public UniteStratigraphique getUniteStratigraphique() { 
     return uniteStratigraphique; 
    } 

    public void setUniteStratigraphique(UniteStratigraphique uniteStratigraphique) { 
     this.uniteStratigraphique = uniteStratigraphique; 
    } 
} 

आप देख सकते हैं, ये हैं कई-करने के लिए - कई जुड़े हुए (0 ... एन --- 0 ... एन, ORMLite एनोटेशन के साथ)।

अब, मेरे कार्यप्रवाह है:


मैं कई "UniteStratigraphique" वर्गों बना सकते हैं और मैं उन्हें अपने डेटाबेस में स्टोर (इस ठीक काम करता है)।

=> तो मेरे पास n * "uniteStratigraphique" संग्रहीत है।

इसके बाद मैं जो चाहता हूं वह "कैंपेन" वर्ग बनाना है जिसमें कई "यूनिटस्ट्रेटिग्राइक" कक्षाएं होंगी।

=> तो मैं "Campagne.java" से इस क्षेत्र को सेट करना चाहते हैं: के साथ n * "UniteStratigraphique" तत्वों मैं बस से पहले संग्रहीत

@ForeignCollectionField 
    private ForeignCollection<UniteStratigraphique> listeUniteStratigraphique; 

मैं इस डीएओ विधि के साथ ऐसा करने की कोशिश की लेकिन यह केवल मेरी db में "UniteStratigraphique" वर्गों नकल और कोई लिंक किया जाता है ..

public void addUsToCampagne(Campagne campagne, 
      ArrayList<UniteStratigraphique> usArray) { 
     ForeignCollection<UniteStratigraphique> usForeign = campagne 
       .getListeUniteStratigraphiqueForeign(); 
     if (usForeign == null) { 
      try { 
       usForeign = getHelper().getCampagneDao() 
         .getEmptyForeignCollection("listeUniteStratigraphique"); 

       for (UniteStratigraphique us : usArray) { 
         usForeign.add(us); 
       } 
      } catch (SQLException e) { 
       e.printStackTrace(); 
      } 
     }else{ 
      for (UniteStratigraphique us : usArray) { 
        usForeign.add(us); 
      } 
     } 

    } 

और मेरी गतिविधि में मैं यह कर रहा हूँ:

db.addCampagne(campagne); 

      if(myUniteStratigraphiqueArray.size() > 0){ 
        db.addUsToCampagne(campagne, myUniteStratigraphiqueArray); 
      } 
+0

क्या आप अपना कोड सुधार सकते हैं। जैसा कि यह खड़ा है यह दूसरों के लिए सहायक नहीं है। – Gray

उत्तर

8

कई संबंधों के लिए कई ORMLite, यह केवल इन 2 वर्गों beetween लिंक के लिए एक 3 टेबल बनाने के लिए है को प्राप्त करने के लिए एक ही रास्ता के साथ गैर स्वत: कर रहे हैं ..

यह लिंक फिर से What is the best way to implement many-to-many relationships using ORMLite?

और यहाँ उदाहरण: https://github.com/j256/ormlite-jdbc/tree/master/src/test/java/com/j256/ormlite/examples/manytomany

आशा है कि यह मदद की इस समस्या का फर्स।

+0

"असंभव"? या शायद आप गैर स्वचालित स्वचालित मतलब है? अगर ऐसा करने के तरीके हैं तो यह असंभव कैसे हो सकता है? – Gray

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