首页 文章

Android Realm将对象添加到现有的一对多关系中

提问于
浏览
0

我遇到了Realm的问题,一对多关系以及更新现有条目以向关系添加更多数据 .

模型1

public class Model1 extends RealmObject
{
    @PrimaryKey
    private String identifier;

    @SerializedName("type")
    private String type;

    @SerializedName("additionalInfo")
    private String additionalInfo;

    @SerializedName("options")
    private RealmList<Model2> moreModels;

}

模型2

public class Model2 extends RealmObject
{
    @SerializedName("hint")
    private String hint;

    @SerializedName("label")
    private String label;

    @SerializedName("favorite")
    private boolean favorite;

    @PrimaryKey
    private String identifier;
}

所以从API我得到一个Model1对象列表,每个对象都包含自己的Model2对象列表 . 很简单 . 这很好用,我可以将它添加到Realm并查看关系 .

现在,当我为另一个用户进行第二次API调用时,我的问题出现了 . 我希望这项工作的方式是让Model2上的identifier属性由userId标签组成 . 因此,每个用户都有自己的Model2对象集 . 但是,我希望只有一组Model1对象,其对Model2对象的引用会随着更多内容添加到Model2表而更新 .

相反,我工作的是保留我的一组Model1(好),但与Model2的关系总是被最新的设置覆盖 . 所以我有一个Model2对象表,有80个条目,但只有最后40个连接 .

所以看起来我的更新或插入正在更新表中的Model1条目(GOOD),但不是将现有关系与新关系连接起来,而只是将关系更新为仅使用新关系 . Model2条目正在正确添加到其表中,因为没有基于主键的重复项 . 但是连接断了 .

更新代码

List<Model1> test = response.body();

try(Realm realmInstance = Realm.getDefaultInstance()) {
    realmInstance.executeTransaction((realm) ->
        {
            realm.insertOrUpdate(test);

            final RealmResults<Model> category = realm.where(Model1).findAll(); 
        }
    );
}

1 回答

  • 1

    是的,这就是 insertOrUpdatecopyToRealmOrUpdate 方法当前的工作方式 . 理想情况下,您可以提供一种模式,如 REPLACE_LISTSMERGE_LISTS ,但现在还没有实现 .

    您唯一的选择是手动更新这些关系 .

相关问题