我想更新一个领域对象,但我没有成功。我尝试了不同的方法,但我仍然得到同样的例外。
首先,我创建一个工厂,然后我搜索它以便更新。这有效。但是,当我尝试使用新名称更新工厂时,我收到了与主键约束相关的异常。那么,是否应该使用方法copyToRealmOrUpdate来搜索对象的密钥?
private void updatePlantRealm() {
RealmConfiguration config = new RealmConfiguration.Builder(this)
.name("garden.realm")
.build();
PlantRealmRepository repository = new PlantRealmRepository(config);
Plant plant = new Plant();
plant.setId("234");
plant.setName("test");
plant.setSize(30);
plant.setGardenId("1452345");
repository.add(plant);
PlantByIdSpecification spec = new PlantByIdSpecification(plant.getId());
repository.query(spec).subscribe(plants -> {
Plant p = plants.get(0);
p.setName("name");
repository.update(p);
}
);
spec = new PlantByIdSpecification(plant.getId());
repository.query(spec).subscribe(plants -> {
Plant p = plants.get(0);
Assert.assertEquals(p.getName(), "name");
}
);
}
更新方法。 ToPlantRealm是一个mapper,它将植物转化为plantRealm。
@Override
public void update(Plant plant) {
final Realm realm = Realm.getInstance(realmConfiguration);
realm.executeTransaction(realmParam -> realmParam.copyToRealmOrUpdate(toPlantRealm.map(plant)));
realm.close();
deleteDB(realm);
}
ADD方法
@Override
public void add(final Iterable<Plant> plants) {
realm = Realm.getInstance(realmConfiguration);
realm.executeTransaction( realmParam -> {
for (Plant plant : plants) {
realmParam.copyToRealm(toPlantRealm.map(plant));
}
});
realm.close();
}
此行产生错误
realm.executeTransaction(realmParam -> realmParam.copyToRealmOrUpdate(toPlantRealm.map(plant)));
我在Realm库中进行了调试,它说密钥已经存在。
已更新
答案 0 :(得分:0)
您的add
方法错误。您应该使用copyToRealmOrUpdate
代替copyToRealm
@Override
public void add(final Iterable<Plant> plants) {
realm = Realm.getInstance(realmConfiguration);
realm.executeTransaction( realmParam -> {
for (Plant plant : plants) {
realmParam.copyToRealmOrUpdate(toPlantRealm.map(plant));
}
});
realm.close();
}