如何仅更新某些领域模型属性,而不是尝试使用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
更新id
。类似于用户中的Update name only where id = "someValue"
。
2)那么,如果有500个领域模型并且每个领域模型只有一个属性被更改,那该怎么办呢?是否应该通过copyToRealmOrUpdate
更新领域中的完整模型更快或迭代所有领域结果模型并首先查找项目然后仅更新单个属性?
答案 0 :(得分:1)
如果您通过Realm创建了对象,则可以在Transaction()
内更改模型属性,或者在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()
。
OR
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");
}
}
});
希望有所帮助!!
答案 1 :(得分:1)
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,然后在事务中修改其属性。