2016-11-08 26 views
2

在我的應用我有以下RealmObjects:如何只保存RealmObject而不是引用的對象

產品 - 這充當主數據不應該被修改。
購物車 - 購物車,讓人們挑選的東西購買。內容將是選擇類型。
選擇 - 代表產品,用戶選擇旁邊額外偏好,例如顏色,尺寸等

使用案例
用戶選擇產品並添加到購物車。產品包裝在內部選擇並存儲在購物車內。說挑選產品A,B和C.

現在將其保存到領域。文檔告訴我使用RealmList添加關係。這使得購物車 - >列表;選擇 - >產品。

然後,如果我使用copyToRealm,我會得到產品 PrimaryKey異常。 由於我只想保存購物車和選擇,我如何使產品的選擇鏈接(用於閱讀備份)但不保存。

如果我使用copyToRealmOrUpdate,我是否有意外更新產品的風險?

回答

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` 
}); 
+0

我最終選擇了後者。對我來說,主要的抱怨是現在我必須將產品和productId字段保留在Selection對象中。 – RobGThai

1

如果你不想存儲產品,那麼你只能保存其號您的對象中。如果您將使用copyToRealmOrUpdate - 您可能會意外更新您的對象,因爲此方法執行深度複製。

相關問題