我想寫入幾個對象到我的領域數據庫。寫入數據庫不保存關聯
由於它們與另一個對象(RealmUser)關聯,我通過getActivities().addAll(activities)
將它們添加到它的RealmList<RealmActivity>
。
我試過這個,有沒有先通過copyToRealm(activities)
將這個集合複製到這個領域,這就是問題所在。這似乎工作,只要我不重新啓動我的應用程序(或者,很奇怪,當我回到另一個活動)。只要我這樣做,這些活動仍然保留在數據庫中,但它們不再與用戶關聯。我嘗試了realm.copyToRealmOrUpdate(user);
和realm.insertOrUpdate(user);
(正如您在代碼中看到的那樣),並且它不會持續比此活動更長的關聯。
我的猜測是,關聯保存在內存中但從未提交給實際文件(?),一旦我離開活動,我的數據庫的內存映像將被刪除,從而失去了關聯,而我的實際數據被保存到實際文件中。那麼,我需要做些什麼來堅持聯想?
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'都應該在這裏工作。當應用程序啓動時,您是否曾經將用戶複製到數據庫並帶有空的「活動」?這將通過用戶對象中的空列表來覆蓋具有相同'userId'的用戶對象。 – beeender
感謝千次以上的評論。我實際上確實爲用戶保留了一個空的活動列表,而這完全不是本意!再次感謝! – wickermoon