2

如何仅更新某些领域模型属性,而不是尝试一次又一次地使用copyToRealmOrUpdate().

public class User extends RealmObject {

@PrimaryKey
public String id = UUID.randomUUID().toString();
private String          name;
private int             age;

@Ignore
private int             sessionId;

// Standard getters & setters generated by your IDE…
public String getName() { return name; }
public void   setName(String name) { this.name = name; }
public int    getAge() { return age; }
public void   setAge(int age) { this.age = age; }
public int    getSessionId() { return sessionId; }
public void   setSessionId(int sessionId) { this.sessionId = sessionId; 
}
}

1)如果User已经在领域中持久化,我只想name使用 primary key更新id。像Update name only where id = "someValue"用户中的东西。

2)那么,如果有 500 个领域模型,并且每个领域模型只有一个属性被更改怎么办。应该通过更新领域中的完整模型copyToRealmOrUpdate更快还是迭代所有领域结果模型并首先找到项目然后仅更新单个属性?

4

2 回答 2

3
final String userId = ...;
try(Realm r = Realm.getDefaultInstance()) {
    r.executeTransaction((realm) -> {
        User user = realm.where(User.class).equalTo("id", userId).findFirst();
        if(user != null) {
            user.setName("set name");
        }
    });
}

您可以通过 id 获取托管 RealmObject,然后在事务中修改其属性。

于 2017-06-30T18:19:48.667 回答
2

Transaction()如果您通过 Realm 创建了对象或在 Realm 数据库上进行了一些查询,您可以更改模型属性。

现在您有一个由领域创建的此类的实例,例如:

Realm realm = Realm.getDefaultInstance();
User user = realm.where(User.class).equalTo("id", "your id").findFirst();// since you are serching on the basis of primary key there will be only one object

因此,当您想更改其属性时,可以更改为 Transaction ,例如:

realm.beginTransaction();
user.setName("abc");
realm.commitTransaction();

它将更改特定属性,无需调用copyToRealmOrUpdate().

或者

realm.executeTransaction(new Realm.Transaction() {
    @Override
    public void execute(Realm realm) {
       RealmResults<User> users = realm
            .where(User.class)
            .equalTo("id", "your id")// or some other condition
            .findAll();
        for(User user : users) {
          user.setName("abc");
        }
    }
});

希望有帮助!!

于 2017-06-30T09:17:05.823 回答