【问题标题】:Saving realm relationships does not persist them保存领域关系不会持久化它们
【发布时间】:2015-03-30 20:22:26
【问题描述】:

我有一个articles 的列表。
这些文章是使用realm.copyToRealmOrUpdate(); 插入的,效果很好。

现在每篇文章都有一个不应被持久化的 authorId。而是我想找到存储的author RealmObject 并为文章设置它的关系。

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

这似乎并没有被领域持久化。

这同样适用于image RealmObject,只是我在保存之前进行了迭代。

这是完整的 sn-p。

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();

如果您需要更多信息,请告诉我。
谢谢。

【问题讨论】:

  • 我只是想把每一条语句都放在realm.beginTransaction();realm.commitTransaction(); 中。但这也无济于事......

标签: java android realm


【解决方案1】:

来自Realm的Christian。您继续操作刚刚复制到 Realm 的独立对象,这将不起作用,因为它们仍然是独立对象而不是“正确的”Realm 对象。您可以在此处阅读更多内容:http://realm.io/docs/java/0.80.0/#creating-objects 和 JavaDoc 中的http://realm.io/docs/java/0.80.0/api/io/realm/Realm.html#copyToRealm-E-

因此,如果您将代码更改为如下所示,它应该可以工作:

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);
            }
        }
    }
});

【讨论】:

  • 感谢您的回复!你是对的。我认为这是按引用保存的。好像不是这样的。稍后我将在 github 上发布一个链接到我的这个问题的更新版本。
  • 所以这是我的固定版本:github.com/MetalMatze/Krautreporter/blob/… 我需要手动迭代图像,因为 getSerializedImages() 有一个 @Ignore 注释。
  • 是的,API 的这个特定部分不是很好,但不幸的是受到 Java 语言本身的限制。
【解决方案2】:

您使用的是 GSON 吗?如果是这样,您是否按照http://realm.io/docs/java/0.80.0/#gson 中概述的示例进行操作?

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多