繁体   English   中英

Activeandroid关系子级null

Activeandroid relationships child null

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

父亲

@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(时间戳= 1276605030,SponsorLists = null)

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

关系如何在activeandroid上工作?

我不明白

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

TKS

2 个回复

基于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");
    }

}

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

1.)在子级(SponsorList)中放置一列(及其设置器),该列将引用父级(SponsorServer)。

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

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

sponsor.sponsorServer = sponsorServer;

3.)将SponsorServer中的SponsorList设为私有,并编写getter方法以访问数据库中的相对SponsorList。

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);
    }
}
1 在ActiveAndroid中获取外键成员“null”

我正在我的Android应用程序中实现ActiveAndroid,因为我指的是这个链接 。 我的问题定义是,我在改装库的帮助下从服务器获取数据列表。 获取数据列表后,我将数据插入“ActiveAndroid”数据库。 在调试我的应用程序时,我检查过,外键和模型类的其他数据成员的数据是正确的 ...

2 ActiveAndroid中的mId是什么,什么时候可以为null?

我正在创建并尝试使用活动android保存表,但由于某种原因该对象无法保存。 我得到的错误是 在调试反编译的Model.class文件时,我发现执行以下语句时发生异常 (请注意,以下行来自activeandroid的反编译的Model.class文件) 它失败,并且发生上 ...

3 无法在ActiveAndroid中保存空列值

为简单起见,我有以下模型: 我的测试失败了: 看来我无法在ActiveAndroid中将列值从任何值更改为null。 很奇怪。 是虫子吗? 我没有找到任何关于它的东西,但是看起来很基本。 如果我调试应用程序并遵循保存方法,则它到达的最后一个命令在SQLLiteConn ...

4 GWT JDO关系问题 - 来自数据存储区的对象的子项为null

我在尝试实现GWT JDO功能时遇到了问题。 假设有一个包含Item对象的Data对象。 在数据存储区中,这将创建一对一的关系。 问题是,当我尝试从数据存储区中获取对象时,“item”字段始终为null 。 当然,我将对象放在包含初始化Item对象(列表末尾)的数据存储区中。 查看 ...

9 领域中的亲子关系

我正在尝试将我的Core Data对象图移动到Realm。 目前,我有一个名为DBNode的实体,该实体具有 我可以在其中存储父节点和该节点的所有子节点。 当我有一个名为RLMNode的Realm对象时:RLMObject with 首次尝试添加对象时崩溃。 我 ...

2014-10-08 04:18:02 1 1686   realm
10 Qt亲子关系

我正在运行一项测试以了解Qt中的父/子关系,并且我对如何在Qt Creator调试器中查看这些关系有疑问。 当我启动演示应用程序时,调试器将显示以下内容: 因为我在添加任何小部件之前调用了Qt的dumpObjectTree(),所以该树是空的,除了MainWindow的布局。 这 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM