作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在我的应用程序中,我有以下 RealmObjects:
产品 - 这作为主数据,不应修改。
购物车 - 购物车允许人们挑选要购买的东西。内容将是选择类型。
选择 - 表示用户选择的产品以及颜色、尺寸等额外偏好。
用例
用户选择产品并添加到购物车。产品被包裹在 Selection 中并存储在 Cart 中。说选择产品 A、B 和 C。
现在将其保存到 Realm 中。文档告诉我使用 RealmList
添加关系。这使得购物车->列表;选择 -> 产品。
然后,如果我使用 copyToRealm
,我将得到 Product 上的 PrimaryKey 异常。由于我想保存仅购物车和选择,我如何将选择链接到产品(用于阅读备份)但不保存它。
如果我使用 copyToRealmOrUpdate
,我是否有意外更新产品的风险?
最佳答案
您可以从一开始就在 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`
});
关于android - 如何只保存 RealmObject 但不保存引用对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40486544/
我是一名优秀的程序员,十分优秀!