【发布时间】: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