Matthias Loibl
Matthias Loibl

Reputation: 873

Saving realm relationships does not persist them

I have a list of articles.
Those articles are inserted by using realm.copyToRealmOrUpdate(); which works perfectly fine.

Now each article has an authorId which should not be persisted. Rather I want to find the stored author RealmObject and set its relationship for the article.

Author author = realm.where(Author.class).equalTo("id", article.getSerializedAuthor()).findFirst();
article.setAuthor(author);

Somehow this does not seem to be persisted by realm.

The same applies to the image RealmObject, just that I iterate before saving.

Here's the full snippet.

realm.beginTransaction();
realm.copyToRealmOrUpdate(articles.data);

for(Article article : articles.data) {
    Author author = realm.where(Author.class).equalTo("id", article.getSerializedAuthor()).findFirst();
    article.setAuthor(author);

    for (Image image : article.getSerializedImages().data) {
        if (article.getImages() == null) {
            article.setImages(new RealmList<Image>());
        }
        article.getImages().add(image);
    }
}
realm.commitTransaction();

Please let me know if you need more information.
Thanks.

Upvotes: 2

Views: 2258

Answers (2)

Christian Melchior
Christian Melchior

Reputation: 20126

Christian from Realm here. You keep manipulating the standalone objects you just copied to Realm, which won't work as they are still standalone objects and not "proper" Realm objects. You can read more here: http://realm.io/docs/java/0.80.0/#creating-objects and in the JavaDoc http://realm.io/docs/java/0.80.0/api/io/realm/Realm.html#copyToRealm-E-

So if you change you code to something like the below, it should work:

realm.executeTransaction(new Realm.Transaction() {
    @Override
    public void execute(Realm realm) {
        List<Article> realmArticles = realm.copyToRealmOrUpdate(articles.data);

        for(Article article : realmArticles) {
            Author author = realm.where(Author.class).equalTo("id", article.getSerializedAuthor()).findFirst();
            article.setAuthor(author);

            for (Image image : article.getSerializedImages().data) {
                article.getImages().add(image);
            }
        }
    }
});

Upvotes: 1

geisshirt
geisshirt

Reputation: 2497

Are you using GSON? If so, did you follow the example as outlined in http://realm.io/docs/java/0.80.0/#gson?

Upvotes: 0

Related Questions