【问题标题】:ORMLite many to many relation AndroidORMLite 多对多关系 Android
【发布时间】:2013-08-20 23:17:19
【问题描述】:

我有两门课:

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

    }

Campagn.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"。

之后我想要创建一个“Campagn”类,其中将包含多个“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);
            }

【问题讨论】:

  • 你能重新格式化你的代码吗?就目前而言,它对其他人没有帮助。

标签: android many-to-many ormlite foreign-collection


【解决方案1】:

多对多关系在 ORMLite 中不是自动的,实现它的唯一方法是只为这两个类之间的链接制作第三个表。..

这个链接指的是这个问题: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

希望对您有所帮助。

【讨论】:

  • “不可能”?或者你的意思是非自动的?有办法怎么可能做不到?
猜你喜欢
  • 1970-01-01
  • 2013-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多