gpt4 book ai didi

android - 如何只保存 RealmObject 但不保存引用对象

转载 作者:搜寻专家 更新时间:2023-11-01 08:31:19 24 4
gpt4 key购买 nike

在我的应用程序中,我有以下 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com