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


}

帰ってきた

SponsorServer1 = SponsorServer(timestamp=1276605030、sponsorLists=null)

子を父オブジェクトに保存するにはどうすればよいですか?

関係はアクティブアンドロイドでどのように機能しますか?

でわからなかった

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

tks

4

2 に答える 2

0

添付したリンクに関連して、次の 3 つの手順で上記のソリューションを完了する必要があります。

1.) 親 (SponsorServer) を参照する子 (SponsorList) に列 (およびセッター) を配置します。

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

2.) SponsorLists を保存するとき、SponsorList アイテムに誰が親であるかを伝え、その後保存します。

sponsor.sponsorServer = sponsorServer;

3.) SponsorServer 内の SponsorLists を非公開にし、データベース内の相対 SponsorLists にアクセスするために 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 に答える