我有Parent
和Child
类:
public class Parent extends RealmObject {
private String name;
private RealmList<Child> children;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public RealmList<Child> getChildren() {
return children;
}
@Override
public String toString() {
return this.name;
}
}
public class Child extends RealmObject {
private String name;
private Parent parent;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Parent getParent() {
return parent;
}
public void setParent(Parent parent) {
this.parent = parent;
}
@Override
public String toString() {
return this.name;
}
}
现在,我创建一个示例数据:
realm.beginTransaction();
realm.deleteAll();
Child child1 = realm.createObject(Child.class);
child1.setName("Bart");
Child child2 = realm.createObject(Child.class);
child2.setName("Lisa");
Child child3 = realm.createObject(Child.class);
child3.setName("Maggie");
Parent parent = realm.createObject(Parent.class);
parent.setName("Homer");
child1.setParent(parent);
child2.setParent(parent);
child3.setParent(parent);
realm.commitTransaction();
为什么我这样查询时没有生孩子?
Parent homer = realm.where(Parent.class).findFirst();
for(Child child : homer.getChildren()) {
System.out.println(child.toString());
}
当我通过parent.getChildren().add(child)
将孩子分配给父母时,它会有效。但是当我将父母分配给孩子时(例如child.setParent(parent)
),它不起作用。我在这里做错了什么?
答案 0 :(得分:2)
这不起作用,因为即使您为子项设置父项,也没有指向父对象中相应子项列表的链接(&#34;父项不知道现在某处有子项称他为他们的父母&#34;)。我不确定甚至可能在Realm中像这样的对象之间建立双向关系。
根据您想要实现的目标,您可以尝试查询孩子:
Child child = realm.where(Child.class).equalTo("parent.name","homer").findAll();
答案 1 :(得分:0)
因为您需要将子项添加到父链接。
设置子项与父项的链接与父项与子项的链接完全相同。
realm.beginTransaction();
realm.deleteAll();
Child child1 = realm.createObject(Child.class);
child1.setName("Bart");
Child child2 = realm.createObject(Child.class);
child2.setName("Lisa");
Child child3 = realm.createObject(Child.class);
child3.setName("Maggie");
Parent parent = realm.createObject(Parent.class);
parent.setName("Homer");
child1.setParent(parent);
child2.setParent(parent);
child3.setParent(parent);
parent.getChildren().add(child1);
parent.getChildren().add(child2);
parent.getChildren().add(child3);
realm.commitTransaction();