How do I update a realm object partially?
Imagine I have a model like this:
class Person {
@PrimaryKey long id;
String name;
Address address;
}
Let's assume I sync my local realm database with a backend and the backend gives me only a Person
with id
and name
where the name has changed (no address).
How do I update only the Person.name
? Furthermore, I want Person.address
stay as it is in the local database.
You can only insert/copy/update entire objects, you can't specify "what fields you don't want to save". So you should query your object and set its stuff and then save it back.
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);
}
});
To update the Person.name
you need to first query the Person
object and then update its name
. All other fields will remain unchanged:
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();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With