在我的应用程序中,我有以下RealmObjects:
产品 - 此操作作为主数据,不应修改 购物车 - 购物车允许人们挑选买东西。内容将是选择类型 选择 - 代表用户选择的产品以及颜色,尺寸等额外偏好。
使用案例
用户选择产品并添加到购物车。产品包装在选择内部并存储在购物车内。说选择产品A,B和C.
现在将其保存到Realm中。文档告诉我使用RealmList
添加关系。这使得购物车 - >清单;选择 - >产品
然后,如果我使用copyToRealm
,我会在产品上获得 PrimaryKey例外。
由于我想保存仅限购物车和选择,如何将选择链接到产品(用于回读备份)但不保存。
如果我使用copyToRealmOrUpdate
,我是否会冒险意外更新产品?
答案 0 :(得分:2)
您可以从头开始在Realm中显式创建RealmObject,并将对象链接设置为托管对象内的托管对象。
realm.executeTransaction((realm) -> {
// ASSUMING PRIMARY KEY
Selection selection = realm.where(Selection.class).equalTo(SelectionFields.ID, selectionId).findFirst();
if(selection == null) {
selection = realm.createObject(Selection.class, selectionId);
}
// here, selection is always managed
//...
Product product = realm.where(Product.class)./*...*/.findFirst();
selection.setProduct(product);
// no insertOrUpdate()/copyToRealmOrUpdate() call for `selection`
});
但您也可以在将代理转为托管后设置产品链接。
realm.executeTransaction((realm) -> {
Selection selection = new Selection();
// assuming selection.getProduct() == null
selection = realm.copyToRealmOrUpdate(selection);
// selection is now managed
Product product = realm.where(Product.class)./*...*/.findFirst();
selection.setProduct(product);
// no insertOrUpdate()/copyToRealmOrUpdate() call for `selection`
});
答案 1 :(得分:1)
如果您不想存储产品,则只能将ID存储在对象中。如果您将使用copyToRealmOrUpdate
- 您可能会意外更新您的对象,因为此方法会执行深层复制。