如何部分更新领域对象

时间:2016-08-22 10:05:50

标签: java android realm

如何部分更新领域对象?

想象一下,我有一个这样的模型:

class Person {
    @PrimaryKey long id;
    String name;
    Address address;
}

我们假设我将本地域数据库与后端同步,而后端仅为Person提供了idname,其中名称已更改(无地址) )。

如何仅更新Person.name?此外,我希望Person.address保持在本地数据库中。

2 个答案:

答案 0 :(得分:4)

您只能插入/复制/更新整个对象,您无法指定"您不想保存哪些字段"。因此,您应该查询对象并设置其内容,然后将其保存回来。

final Address address = getAddress();
realm.executeTransaction(new Realm.Transaction() {
    @Override
    public void execute(Realm realm) {
        Person person = realm.where(Person.class).equalTo(PersonFields.ID, id).findFirst();
        if(person == null) {
            person = new Person();  // or realm.createObject(Person.class, id);
            person.id = id; 
        }
        person.address = address;
        realm.insertOrUpdate(person);
    }
});

答案 1 :(得分:1)

要更新Person.name,您需要先查询Person对象,然后更新其name。所有其他字段将保持不变:

long id = ... // from backend
String newName = ... // from backend
Realm realm = Realm.getDefaultInstance();
realm.beginTransaction();
Person person = realm.where(Person.class).equalTo("id", id).findFirst();
person.setName(newName);
realm.commitTransaction();
realm.close();