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();
}
);
}
是的,这就是 insertOrUpdate
和 copyToRealmOrUpdate
方法目前的工作方式。理想情况下,您可以提供一种模式,例如 REPLACE_LISTS
或 MERGE_LISTS
,但目前尚未实现。
您唯一的选择是手动更新这些关系。
我 运行 遇到 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();
}
);
}
是的,这就是 insertOrUpdate
和 copyToRealmOrUpdate
方法目前的工作方式。理想情况下,您可以提供一种模式,例如 REPLACE_LISTS
或 MERGE_LISTS
,但目前尚未实现。
您唯一的选择是手动更新这些关系。