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

时间:2018-01-18 22:24:07

标签: android realm one-to-many

我遇到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 + label组成。因此,每个用户都有自己的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 个答案:

答案 0 :(得分:1)

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

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