2016-04-28 5 views
0

私は、SQL Serverで持っているものと同じミラーを持つAndroidでRealmデータベースを作成しようとしています。アイデアはAndroid上のものを定期的に更新して、両方が同じデータを持つようにすることです。IDを使ってRealm.io FKオブジェクトを参照する

簡単にするために、オブジェクト、カラー、シェイプという3つのテーブルがあるとします。私のメインテーブルのオブジェクトは、このフォームを持っています:

ID  | int 
------------------ 
Name | string 
------------------ 
IDColor | int 
------------------ 
IDShape | int 

ここでIDColorとIDShapeは、色と形の表を参照しています。これらの2つの内容は重要ではありません。

public class MyObject extends RealmObject { 
    @Required 
    private String name; 
    private Color color; 
    private Shape shape; 
} 

私が直接MyObject.colorとMyObject.shapeを参照することができますこの方法:私がやりたい何

は、Android上でこのような何かを定義することです。しかし、この方法でAFAIK私は自分のIDで色と形を指定することができないので、realm.copyToRealmOrUpdateは動作しません。

私のJSONを直接(理想的に)インポートするか、またはいくつかの前処理または後処理を行った後にインポートする方法がありますか?

おかげ

編集:私は、この使用Xamarinに似何かをする方法を発見しました。下記の私の答えを参照してください。

答えて

1

レルムはオブジェクトデータベースなので、3つのテーブルを個別にインポートすることは実際には機能しません。オブジェクト構造を設定する前処理をする必要があります。

入力データをJSONObjectに変換してrealm.createOrUpdateFromJsonObject()メソッドを使用するとできます。それはcopyToRealmOrUpdateと同様に動作しますが、JSON上で直接動作します。

擬似コード:

JSONObject obj = new JSONObject(myObjectJson); 
obj.put("color", getColorJson(obj.getInt("IDColor"))); 
realm.creteOrUpdateFromJSonObject(obj); 
+0

(実際には、私はcreateOrUpdateFromJSonObjectと言っていました)この前処理を避けることを望んでいましたが、それは必要です。ありがとう。 – legrojan

+0

はい、前処理が必要ですが、後でデータをクエリするときにすべての関係を作成する必要はありません。 –

1

私はもはや「バニラアンドロイド」を使用していないが、私は次のように1は、私はXamarinの私の元の質問に意図何ができることを見出した。

public class MyObject: RealmObject 
{ 
    public int IdColor {get; set;} 
    public Color color 
    { 
     get 
     { 
      return realm.All<Color>().FirstOrDefault(x => x.Id == IdColor); 
     } 
     set 
     { 
      IdColor = value.Id; 
     } 
    } 
} 

どれでもカスタムgetterとsetterはRealmで無視されるため、オブジェクトはデータベースに永続化されません。これは、レルム内の従来のSQLデータベースのFK動作を再現するために見つけた最も簡単な方法です。

関連する問題