2013-08-19 44 views
5

Tôi có hai lớp:ORMLite nhiều đối với nhiều mối quan hệ 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; 
    } 
} 

Như bạn có thể thấy, đây là những Nhiều-To -Nhiều liên kết (0 ... n --- 0 ... n, với chú thích ORMLite).

Bây giờ, công việc của tôi là:


tôi có thể tạo nhiều "UniteStratigraphique" lớp học và tôi lưu trữ chúng vào cơ sở dữ liệu của tôi (điều này hoạt động tốt).

=> Vì vậy, tôi có n * "UniteStratigraphique" được lưu trữ.

Sau đó, những gì tôi muốn là tạo một lớp "Campagne" có chứa nhiều lớp "UniteStratigraphique".

=> Vì vậy, tôi muốn thiết lập lĩnh vực này từ "Campagne.java":

@ForeignCollectionField 
    private ForeignCollection<UniteStratigraphique> listeUniteStratigraphique; 

với n * "UniteStratigraphique" yếu tố tôi chỉ được lưu trữ trước đó.

Tôi cố gắng để làm điều này với phương pháp DAO này nhưng nó chỉ lặp lại trong các "UniteStratigraphique" lớp học vào db của tôi và không có liên kết được thực hiện ..

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

    } 

Và trong Hoạt động của tôi, tôi đang làm điều này:

db.addCampagne(campagne); 

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

Bạn có thể định dạng lại mã của mình không. Vì nó đứng nó không hữu ích cho người khác. – Gray

Trả lời

8

Nhiều người đến Nhiều mối quan hệ là không tự động với ORMLite, cách duy nhất để đạt được điều đó là để thực hiện một Bảng 3 chỉ dành cho liên kết beetween 2 loại cổ phiếu này ..

này liên kết lại fers cho vấn đề này: What is the best way to implement many-to-many relationships using ORMLite?

Và ví dụ ở đây: https://github.com/j256/ormlite-jdbc/tree/master/src/test/java/com/j256/ormlite/examples/manytomany

Hy vọng nó giúp.

+0

"Không thể"? Hoặc có thể bạn có nghĩa là không tự động? Làm thế nào nó có thể là không thể nếu có cách để làm điều đó? – Gray

Các vấn đề liên quan