如果有任何更改,如何在新旧模型对象和insertOrUpdate之间进行脏检查?

时间:2018-01-18 16:15:12

标签: android realm realm-mobile-platform real-mode

提前致谢。

我想要检查现有和新领域模型对象之间的数据差异。

示例

public class PostModel extends RealmObject {

    @Required
    @PrimaryKey
    @Index
    private String postId;
    private String message;

}

假设我们有两个对象

PostModel old = new PostModel("one", "Welcome");
realm.copyToRealm(old);

新对象

PostModel newOne = new PostModel("one", "Welcome to World");

在使用newOne更新旧对象之前应该检查数据更改,如果有更改则应该在域中插入,如下所示

realm.dirtyCheckAndUpdate(old, newOne);

//底层应该在

下面
  1. 以id" one"
  2. 获取记录
  3. 检查db记录和新记录之间的区别(!old.message.equalsIgnore(newOne.message))。
  4. 如果有更改,则应该发生copyToRealmOrUpdate()。
  5. 我刚举了一个例子,我需要为复杂的RealmModel建立关系。

1 个答案:

答案 0 :(得分:0)

为什么需要检查?你可以打电话给copyToRealmOrUpdate()吗?它会更新数据,但如果它覆盖具有相同数据的数据,则最终结果是相同的。

否则,您将被迫自己实施所有检查,这非常耗时且容易出错。您也可以制作自己的注释处理器,为您生成逻辑。它看起来像是:

public boolean compare(PostModel m1, PostModel m2) {
  if (!m1.getId().equals(m2.getId()) return false;
  if (!m1.getMessage().equals(m2.getMessage()) return false;
  if (!PostModelReference.compare(m1.getRef(), m2.getRef()) return false; // Recursive checks
}