2016-08-22 114 views
4

如何部分更新領域對象?如何部分更新領域對象

想象我有這樣一個模型:

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

假設我同步我的本地領域數據庫與後端和後端給我只能用idname一個Person其中名稱已更改(無地址)。

如何僅更新Person.name?此外,我想Person.address保持原樣,在本地數據庫中。

+1

你必須手動完成。查詢Realm上的'id',更新開始事務更新從服務器獲得的值並提交 – Budius

+0

是否真的沒有其他方法?聽起來很痛苦...... – sockeqwe

+1

我以前並沒有看到這個問題,一個來自Realm團隊的人回答說。我現在找不到鏈接,但是你可以搜索它。是的,這很痛苦。如果有一個帶有空檢查的'update'方法,那將會很棒。 – Budius

回答

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(); 
2

只能插入/複製/更新整個對象,你不能指定「哪些領域你不希望保存」。所以你應該查詢你的對象並設置它的東西,然後將其保存。

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); 
    } 
});