java – Android Realm copyToRealmOrUpdate创建嵌套对象的重复

前端之家收集整理的这篇文章主要介绍了java – Android Realm copyToRealmOrUpdate创建嵌套对象的重复前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下课程:
  1. public class Note extends RealmObject {
  2.  
  3. @PrimaryKey
  4. private String id;
  5.  
  6. private Template template;
  7.  
  8. // other primitive fields,getters & setters
  9. }
  10.  
  11. public class Template extends RealmObject {
  12.  
  13. private String name;
  14.  
  15. private String color;
  16.  
  17. // other primitive fields,getters & setters
  18. }

我从后端通过Retrofit& Gson,所以我有可以使用的java对象作为回应.

让我们想象一下,每次我称之为后端,我都会收到相同的三个笔记.
当我获得Note对象的列表时,我执行以下操作:

  1. private void fetchNotesAndSave() {
  2. List<Notes> notes = getNotesViaRetrofit();
  3.  
  4. Realm realm = Realm.getInstance(mContext);
  5. realm.beginTransaction();
  6. realm.copyToRealmOrUpdate(notes);
  7. realm.commitTransaction();
  8. realm.close();
  9. }

之后,我调用这些行来检查存储对象的计数:

  1. int notesCount = mRealm.where(Note.class).findAll().size();
  2. int templatesCount = mRealm.where(Template.class).findAll().size();

首次:

  1. notesCount == 3;
  2. templatesCount == 3;

那就对了.但是,如果我再次调用服务器,请获取相同的注释(相同的primaryKey ids),然后再次调用fetchNotesAndSave(),我将得到以下结果:

  1. notesCount == 3;
  2. templatesCount == 6;

每次调用copyToRealmOrUpdate()时,与primaryKey对象内部的嵌套对象都将重复 – 不会更新.

有没有办法改变这种行为?
如果您需要更多信息,请通知我.提前致谢!

解决方法

这是因为您的Template类没有任何主键.在这种情况下,这些对象将被重新插入,因为不能保证引用的模板对象安全地被更新,即使它们是具有主键的另一个对象的一部分.

如果你添加一个@PrimaryKey到你的模板类,它应该按照你期望的方式工作.

猜你在找的Android相关文章