我有一个articles的列表.
这些文章是通过使用realm.copyToRealmOrUpdate()插入的;效果很好.
现在,每篇文章都有一个authorId,不应保留它.而是我想找到存储的author RealmObject并为文章设置其关系.
Author author = realm.where(Author.class).equalTo("id", article.getSerializedAuthor()).findFirst();
article.setAuthor(author);
以某种方式,这似乎不是领域所坚持的.
同样适用于image RealmObject,只是我在保存之前进行了迭代.
这是完整的代码段.
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的基督徒.您将继续操作刚刚复制到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);
}
}
}
});