私の領域データベースに複数のオブジェクトを書き込もうとしています。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);
}
});
}
関連付けを維持する必要はありません。表示するコードは、関連付けをディスクに保存する必要があります。 'userId'は主キーですか? 'copyToRealmOrUpdate()'と 'insertOrUpdate'は両方ともここで動作します。あなたは、アプリケーションが起動したときに空の 'activities'を使ってdbにユーザをコピーしますか?これは、ユーザーオブジェクト内の空のリストによって同じ 'userId'でユーザーオブジェクトを上書きします。 – beeender
このコメントには何千回も感謝しています。私は実際には意図していなかった空のアクティビティリストをユーザに保存しました!再度、感謝します! – wickermoon