首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果有任何更改,如何在新旧模型对象和insertOrUpdate之间进行脏检查?

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

Stack Overflow用户
提问于 2018-01-18 16:15:11
回答 1查看 44关注 0票数 0

提前谢谢。

在我的场景中,我希望检查现有的和新的领域模型对象之间的数据差异。

示例

代码语言:javascript
复制
public class PostModel extends RealmObject {

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

}

假设我们有两个对象

年长的

代码语言:javascript
复制
PostModel old = new PostModel("one", "Welcome");
realm.copyToRealm(old);

新对象

代码语言:javascript
复制
PostModel newOne = new PostModel("one", "Welcome to World");

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

代码语言:javascript
复制
realm.dirtyCheckAndUpdate(old, newOne);

//基础应该在下面完成

  1. 使用id "one“获取记录
  2. 检查db记录和新记录(!old.message.equalsIgnore(newOne.message))之间的差异。
  3. 如果存在更改,那么应该会发生copyToRealmOrUpdate()。

我只是举了一个例子,我需要为复杂的RealmModel与关系。

EN

回答 1

Stack Overflow用户

发布于 2018-01-22 12:34:52

你为什么要检查?你能打电话给copyToRealmOrUpdate()吗?不管如何,它都会更新数据,但是如果它用相同的数据覆盖数据,则最终结果是相同的。

否则,您将被迫实现所有的检查自己,这是耗时和容易出错的。您还可以制作自己的注释处理器,为您生成逻辑。它看起来应该是:

代码语言:javascript
复制
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
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48325722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档