0

父亲

@Data  
        @Table(name = "SponsorServer")
        public class SponsorServer extends Model {

        @SerializedName("timestamp")
        @Column(name = "Timestamp")
        private String timestamp;

            @SerializedName("sponsorsList")
            @Column(name = "SponsorLists", onUpdate = Column.ForeignKeyAction.CASCADE, onDelete = Column.ForeignKeyAction.CASCADE)
            public List<SponsorList> sponsorLists;
        }

孩子

    @Data
    @Table(name = "SponsorList")
    public class SponsorList extends Model {

        @SerializedName("id")
        @Column(name = "SponsorListID", unique = true, onUniqueConflict = Column.ConflictAction.REPLACE)
        private int sponsorListID;

        @SerializedName("order")
        @Column(name = "SponsorListOrder")
        private int order;


        @SerializedName("name")
        @Column(name = "Name")
        private String name;
}

另一个班级

    ActiveAndroid.beginTransaction();

try {

   for (SponsorList sponsorList : sponsorServer.getSponsorLists()) {


     for (Sponsor sponsor : sponsorList.getSponsors()) {
        sponsor.save();
     }

   sponsorList.save();

}

sponsorServer.save();

ActiveAndroid.setTransactionSuccessful();

} finally {

ActiveAndroid.endTransaction();

SponsorServer sponsorServer1 = new Select().all().from(SponsorServer.class).executeSingle();

Log.d("", "-------- sponsorServer1 = " + sponsorServer1);


}

它的回归

赞助商服务器1 =赞助商服务器(时间戳=1276605030,赞助商列表=空)

如何将孩子保存在父亲对象中?

关系如何在 activeandroid 上工作?

我不明白

https://github.com/pardom/ActiveAndroid/wiki/Creating-your-database-model

tks

4

2 回答 2

1

基于 ActiveAndroid github和我的项目,关系应该是这样工作的:

@Table(name = "Sesje")
public class ChildEntity extends Model {

    @Column(name = "FatherEntity", onDelete = ForeignKeyAction.CASCADE)
    public FatherEntity fatherEntity;

}


@Table(name = "FatherEntity")
public class FatherEntity extends Model {

    public List<ChildEntity> children(){
        return getMany(ChildEntity.class, "FatherEntity");
    }

}
于 2017-01-25T12:52:51.117 回答
0

与您附加的链接相关,您应该通过以下 3 个步骤完成上述解决方案:

1.)在子(SponsorList)中放置一个列(它是setter),它将引用父(SponsorServer)。

@Column(name = "SponsorServer")
public SponsorServer sponsorServer;

2.) 当你保存 SponsorLists 时,告诉 SponsorList 项目谁是它的父项,然后保存它。

sponsor.sponsorServer = sponsorServer;

3.) 将 SponsorServer 中的赞助商列表设为私有,并编写一个 getter 方法以访问数据库中的相关赞助商列表。

public List<SponsorList> getSponsorLists() {
    if(sponsorLists == null){
        sponsorLists = getMany(SponsorList.class, "SponsorServer");
    }
    return sponsorLists;
}

在这些修改之后,您可以使用 getSponsorLists 方法访问 SponsorServer 的 SponsorLists。

完整的代码将如下所示:

家长:

@Data  
@Table(name = "SponsorServer")
public class SponsorServer extends Model {

    @SerializedName("timestamp")
    @Column(name = "Timestamp")
    private String timestamp;

    @SerializedName("sponsorsList")
    private List<SponsorList> sponsorLists;

    public List<SponsorList> getSponsorLists() {
        if(sponsorLists == null){
            sponsorLists = getMany(SponsorList.class, "SponsorServer");
        }
        return sponsorLists;
    }
}

孩子:

@Data
@Table(name = "SponsorList")
public class SponsorList extends Model {

    @SerializedName("id")
    @Column(name = "SponsorListID", unique = true, onUniqueConflict = Column.ConflictAction.REPLACE)
    private int sponsorListID;

    @SerializedName("order")
    @Column(name = "SponsorListOrder")
    private int order;


    @SerializedName("name")
    @Column(name = "Name")
    private String name;

    @Column(name = "SponsorServer")
    public SponsorServer sponsorServer;
}

保存的代码部分:

ActiveAndroid.beginTransaction();

try {

    for (SponsorList sponsorList : sponsorServer.getSponsorLists()) {

        for (Sponsor sponsor : sponsorList.getSponsors()) {
            sponsor.sponsorServer = sponsorServer;
            sponsor.save();
        }

        sponsorList.save();
    }

    sponsorServer.save();

    ActiveAndroid.setTransactionSuccessful();

} finally {

    ActiveAndroid.endTransaction();

    SponsorServer sponsorServer1 = new Select().all().from(SponsorServer.class).executeSingle();

    Log.d("", "-------- sponsorServer1 Lists= ");
    for(SponsorList item : sponsorServer1.getSponsorLists()){
        Log.d("", "" + item);
    }
}
于 2015-12-09T14:09:00.627 回答