【问题标题】:Android Realm adding objects to existing one to many relationshipAndroid Realm将对象添加到现有的一对多关系
【发布时间】:2018-01-18 22:24:07
【问题描述】:

我在 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 上的标识符属性由 userId + 标签组成。因此,每个用户都将拥有自己的一组 Model2 对象。但是,我希望只有一组 Model1 对象,其中对 Model2 对象的引用会随着更多添加到 Model2 表中而更新。

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

所以看起来我的更新或插入正在更新表中的 Model1 条目(好),但不是将现有关系与新关系连接起来,它只是更新关系以仅使用新关系。 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(); 
        }
    );
}

【问题讨论】:

    标签: android realm one-to-many


    【解决方案1】:

    是的,insertOrUpdatecopyToRealmOrUpdate 方法目前就是这样工作的。理想情况下,您可以提供一种模式,例如 REPLACE_LISTSMERGE_LISTS,但目前尚未实现。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多