Android 将对象添加到现有一对多关系的领域

Android Realm adding objects to existing one to many relationship

我 运行 遇到 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 + label 组成。因此,每个用户都会有自己的一组 Model2 对象。但是,我希望只有一组 Model1 对象,随着更多对象添加到 Model2,它对 Model2 对象的引用得到更新 table。

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

所以看起来我的更新或插入正在更新 table 中的 Model1 条目(好)但不是将现有关系与新关系连接起来,它只是更新关系以仅使用新关系那些。 Model2 条目被正确添加到它们的 table 中,因为没有基于主键的重复项。但是连接断开了。

更新代码

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

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

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

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

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