【发布时间】:2016-01-10 15:35:43
【问题描述】:
假设我有一个看起来像这样的领域对象结构 -
public class Person extends RealmObject {
@PrimaryKey
private int id;
private String name;
private List<Pet> pets
// Setters, getters...
}
public class Pet extends RealmObject {
private String name;
private MedicalRecord record;
// Setters, getters...
}
public class MedicalRecord extends RealmObject {
private String something;
private String somethingElse;
// Setters, getters...
}
现在我收到了一个带有现有 id(主键)的新 Person 对象,我想更新这个人。 所以我做这样的事情 -
realm.beginTransaction();
realm.copyToRealmOrUpdate(person);
realm.commitTransaction();
问题是这个人的宠物清单(和宠物的医疗记录)仍然在数据库中。不再与此人关联,但仍然存在。
我试图这样做 -
Person existingPerson = realm.where(Person .class).equalTo("id", ID).findFirst();
existingPerson.getPets().clear();
但那里没有成功。如何删除 realmObjects 的子对象?
另外,有没有办法为领域对象定义策略,以便在没有引用它时将自己删除(它没有链接到任何父对象)?
【问题讨论】:
-
对不起,我之前误解了你的问题。目前还没有方法可以清除和删除
RealmList中的所有对象,请参阅此问题github.com/realm/realm-java/issues/1560 和github.com/realm/realm-java/issues/1104。目前的解决方法是删除循环中的每个对象,顺序如下: for (int i = dogs.size() - 1; i >= 0 ; i--) { dogs.get(i).removeFromRealm() ; } -
RealmList.removeFromRealm()即将合并,您可以在此 PR github.com/realm/realm-java/pull/2061 中查看进度 -
RealmList.removeFromRealm()已经合并到master,可以等待下一个版本或者用snapshot试试。