2013-08-19 7 views
5

Ich habe zwei Klassen:ORMLite viele zu viele Beziehung Android

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; 
    } 
} 

Wie Sie sehen können, sind diese Many-To -Mehrfach verknüpft (0 ... n --- 0 ... n, mit ORMLite-Annotationen).

Nun, mein Workflow ist:


ich mehrere "UniteStratigraphique" Klassen erstellen und speichere ich sie in meine Datenbank (das funktioniert gut).

=> Also ich habe n * "UniteStratigraphique" gespeichert.

Danach möchte ich eine "Campagne" -Klasse erstellen, die mehrere "UniteStratigraphique" -Klassen enthalten wird.

=> Also ich mag dieses Feld setzen von "Campagne.java":

@ForeignCollectionField 
    private ForeignCollection<UniteStratigraphique> listeUniteStratigraphique; 

mit dem n * "UniteStratigraphique" Elemente, die ich vor gerade gespeichert.

Ich habe versucht, dies mit dieser DAO-Methode zu tun, aber es nur die „UniteStratigraphique“ Klassen in meine db duplizieren und keine Verbindung hergestellt wird ..

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); 
      } 
     } 

    } 

Und ich dies in meiner Tätigkeit so machte:

db.addCampagne(campagne); 

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

Sie können Ihren Code neu formatieren. So wie es aussieht, ist es für andere nicht hilfreich. – Gray

Antwort

8

viele zu viele Beziehungen sind nicht automatisch mit ORMLite, dem einzigen Weg, um es zu erreichen für Link beetween diese 2 Klassen nur eine dritte Tabelle zu machen ..

Dieser Link re fers für dieses Problem: What is the best way to implement many-to-many relationships using ORMLite?

Und das Beispiel hier: https://github.com/j256/ormlite-jdbc/tree/master/src/test/java/com/j256/ormlite/examples/manytomany

Hoffe, es half.

+0

"Unmöglich"? Oder meinst du vielleicht nicht automatisch? Wie kann es unmöglich sein, wenn es Möglichkeiten gibt, dies zu tun? – Gray