2013-08-19 22 views
5

Mam dwie klasy:ORMLite wiele do wielu relacji 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; 
    } 
} 

Jak widać, są to wiele do -Wiele połączonych (0 ... n --- 0 ... n, z adnotacjami ORMLite).

Teraz moje przepływu pracy jest:


utworzyć wiele "UniteStratigraphique" klas i przechowywać je w mojej bazy danych (to działa prawidłowo).

=> Więc mam n * "UniteStratigraphique" przechowywane.

Po tym wszystkim, czego chcę, to stworzyć klasę "Campagne", która będzie zawierała wiele klas "UniteStratigraphique".

=> Tak, chcę ustawić pole z "Campagne.java":

@ForeignCollectionField 
    private ForeignCollection<UniteStratigraphique> listeUniteStratigraphique; 

z n * "UniteStratigraphique" elementów Właśnie zapisane wcześniej.

Próbowałem to zrobić z tej metody DAO, ale to tylko powielać „UniteStratigraphique” klas w moim DB i żaden związek jest wykonany ..

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

    } 

A w mojej działalności to robię:

db.addCampagne(campagne); 

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

Czy możesz ponownie sformatować swój kod. W obecnej wersji nie jest to pomocne dla innych. – Gray

Odpowiedz

8

wiele do wielu relacji są dla automatycznej z ORMLite, jedynym sposobem, aby osiągnąć to, aby 3rd Tabela tylko dla łącza beetween tych 2 klas ..

Ten link re fers tego problemu: What is the best way to implement many-to-many relationships using ORMLite?

a przykład tutaj: https://github.com/j256/ormlite-jdbc/tree/master/src/test/java/com/j256/ormlite/examples/manytomany

nadzieję, że to pomogło.

+0

"Niemożliwe"? A może masz na myśli nieautomatyczny? Jak to może być niemożliwe, jeśli istnieją sposoby na to? – Gray