2016-10-10 7 views
1

私の領域データベースに複数のオブジェクトを書き込もうとしています。dbへの書き込みは関連付けを保存しません

別のオブジェクト(RealmUser)に関連付けられているため、RealmList<RealmActivity>getActivities().addAll(activities)を追加します。

最初にコレクションをcopyToRealm(activities)経由でレルムにコピーして、これを試してみましたが、これは問題です。これは、私のアプリを再起動しない限り(または、私が別のアクティビティに戻ったときには奇妙なことに)十分に機能しているようです。私がそれをするとすぐに、活動はデータベースに残っていますが、ユーザーはもはやユーザーに関連付けられていません。私はrealm.copyToRealmOrUpdate(user);realm.insertOrUpdate(user);を試しました(コードで分かるように)、このアクティビティよりも長い間、関連付けを永続化しません。

私の推測では、アソシエーションは実際のファイル(?)にコミットされず、アクティビティを終了するとデータベースのメモリイメージが削除され、アソシエーションが失われます。データは実際のファイルに保存されます。だから、私は団体を維持するために何をする必要がありますか? beeenderとして

try(Realm realm = Realm.getDefaultInstance()) 
{ 
    realm.executeTransaction(new Realm.Transaction() 
    { 
     @Override 
     public void execute(Realm realm) 
     { 
      RealmUser user = realm.where(RealmUser.class).equalTo("userId", userId).findFirst(); 
      List<RealmActivity> tmp = realm.copyToRealm(activities); 

      user.getActivities().addAll(tmp); 
      user.getVitalData().addAll(realm.copyToRealm(vitalData)); 
      user.getDailyActivities().addAll(realm.copyToRealm(dailies)); 

      realm.copyToRealmOrUpdate(user); 
      realm.insertOrUpdate(user); 
     } 
    }); 
} 
+2

関連付けを維持する必要はありません。表示するコードは、関連付けをディスクに保存する必要があります。 'userId'は主キーですか? 'copyToRealmOrUpdate()'と 'insertOrUpdate'は両方ともここで動作します。あなたは、アプリケーションが起動したときに空の 'activities'を使ってdbにユーザをコピーしますか?これは、ユーザーオブジェクト内の空のリストによって同じ 'userId'でユーザーオブジェクトを上書きします。 – beeender

+0

このコメントには何千回も感謝しています。私は実際には意図していなかった空のアクティビティリストをユーザに保存しました!再度、感謝します! – wickermoon

答えて

1

はすでに、私は空の活動に私がログインするたびにユーザーのインスタンスをリストに保存した、と指摘した。それは問題でした。

関連する問題