2016-02-24 19 views
1

直接代碼。我們有兩類:Android的境界:在RealmObject中存儲一個非RealmObject一個

class Rocket extends RealmObject 
{ 
@PrimaryKey 
private long id; 
private String name; 
private Payload pl; 
} 

class Payload 
{ 
private String name; 
private double mass; 
} 

如何在領域中存儲火箭?

  1. 我可以手動序列化有效載荷到一種字符串中,然後將它與Rocket一起保存。但它很慢。
  2. 我可以從RealmObject擴展Payload並將其保存到表中。但是,如果我這樣做,我應該刪除有效載荷,每次我刪除父Rocket。它絕對不是一個選項,因爲模型變得非常混亂和複雜。

如果需要我可以實現Serializable或Parcelable接口,但我真的需要將我的對象保存到Realm中。

謝謝。

回答

1

它看起來像你主要關心的顯而易見的解決方案(擴展RealmObject)是,當你刪除父0123'時,你想刪除Payload。不幸的是,級聯刪除are not yet supported。您的選項是:

  • 序列化到一個字符串(注意,這有Rocket對象以外的地方完成)
  • 使Payload延長RealmObject,並給它相同的主鍵爲您Rocket對象,然後在將其刪除同時(通過相同的密鑰)

我推薦第二個解決方案,用的方法類似下面一起:

private void deleteRocket(long id) { 
    realm.where(Rocket.class).equalTo("id", id).findFirst().removeFromRealm(); 
    realm.where(Payload.class).equalTo("id", id).findFirst().removeFromRealm(); 
} 
+0

謝謝您的回覆。我不需要級聯刪除親戚。我只需要在該數據庫對象中存儲一個結構(具有幾個成員變量的類)。如果需要的話,我可以實現Serializable接口。級聯刪除是通過存儲自定義RealmObjects實現類似功能的幾個選項之一。但是,應該有一個簡單的方法來實現這一點。我很失望TBH。但仍然是一個很好的數據庫。 (標示爲接受,因爲我不認爲有一個簡單的方法可以做我想做的事。) – atomontage

+0

啊,我明白了。如果你[看看這個答案我早點離開,並且來自Christian Melchior的評論](http://stackoverflow.com/a/35592653/1217087),你會看到自定義getters/setters(即'setPayload(Payload p) ',私人成員是'String')目前是不支持的,但是在0.88。所以你可以在那裏實現你的序列化/反序列化邏輯,一旦0.88發佈(現在有一個測試快照,我相信)。 –

+0

定製setter/getters支持的beta快照目前無法使用(2016年2月5日上午1:15 UTC)。但它很快就會來臨。查看https://github.com/realm/realm-java/pull/2196 – beeender