我遇到了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 回答
是的,这就是
insertOrUpdate
和copyToRealmOrUpdate
方法当前的工作方式 . 理想情况下,您可以提供一种模式,如REPLACE_LISTS
或MERGE_LISTS
,但现在还没有实现 .您唯一的选择是手动更新这些关系 .