2013-08-19 46 views
5

我有兩個類:ORMLite多對多的關係,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; 
    } 
} 

正如你所看到的,這些都是多對多 - 許多鏈接(0 ... n --- 0 ... n,帶有ORMLite註釋)。現在

,我的工作流程是:


我創建多個「UniteStratigraphique」類和我將它們存儲到我的數據庫(這工作正常)。

=>所以我有n *「UniteStratigraphique」存儲。

之後,我想要創建一個「Campagne」類,它將包含多個「UniteStratigraphique」類。

=>所以我想從 「Campagne.java」 設置該字段:

@ForeignCollectionField 
    private ForeignCollection<UniteStratigraphique> listeUniteStratigraphique; 

與n * 「UniteStratigraphique」 我之前剛剛存儲的元素。

我試着用這個DAO方法的做到這一點,但它只是重複「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,實現它是使第3表只用於鏈路beetween這2類的唯一途徑..

此鏈接再FERS這個問題: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