Realm android一对多 - 由父母取出的孩子

时间:2017-02-16 20:57:26

标签: java android realm

我有ParentChild类:

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)),它不起作用。我在这里做错了什么?

2 个答案:

答案 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();