如何部分更新領域對象?如何部分更新領域對象
想象我有這樣一個模型:
class Person {
@PrimaryKey long id;
String name;
Address address;
}
假設我同步我的本地領域數據庫與後端和後端給我只能用id
和name
一個Person
其中名稱已更改(無地址)。
如何僅更新Person.name
?此外,我想Person.address
保持原樣,在本地數據庫中。
如何部分更新領域對象?如何部分更新領域對象
想象我有這樣一個模型:
class Person {
@PrimaryKey long id;
String name;
Address address;
}
假設我同步我的本地領域數據庫與後端和後端給我只能用id
和name
一個Person
其中名稱已更改(無地址)。
如何僅更新Person.name
?此外,我想Person.address
保持原樣,在本地數據庫中。
要更新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();
只能插入/複製/更新整個對象,你不能指定「哪些領域你不希望保存」。所以你應該查詢你的對象並設置它的東西,然後將其保存。
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);
}
});
你必須手動完成。查詢Realm上的'id',更新開始事務更新從服務器獲得的值並提交 – Budius
是否真的沒有其他方法?聽起來很痛苦...... – sockeqwe
我以前並沒有看到這個問題,一個來自Realm團隊的人回答說。我現在找不到鏈接,但是你可以搜索它。是的,這很痛苦。如果有一個帶有空檢查的'update'方法,那將會很棒。 – Budius