用于子的领域java链查询

时间:2018-05-22 10:13:12

标签: java realm

以下是有孩子的样本父母

Parent[0].Children[0].Name = Johnson
Parent[0].Children[0].Age = 16

Parent[0].Children[1].Name = Jessica
Parent[0].Children[1].Age = 17

Parent[1].Children[0].Name = Lawson
Parent[1].Children[0].Age = 17

Parent[1].Children[1].Name = Jessica
Parent[1].Children[1].Age = 19

我只是想让父母带着孩子名字Jessica& 17岁

当我尝试

realm.where(Parent.class).beginGroup().equalTo("childrens.name","Jessica").equalTo("childrens.age","17").endGroup().findAll();

它让父母双方都归于我,因为第二位父母有17岁及以下的孩子。名叫杰西卡。我怎样才能得到第一个父母?

2 个答案:

答案 0 :(得分:0)

链接查询意味着"至少有一个X条件为真"

所以你的查询

realm.where(Parent.class)  
     .beginGroup()
     .equalTo("childrens.name","Jessica")
     .equalTo("childrens.age","17")
     .endGroup()
     .findAll();

说,

"给我父母的父母至少有一个名字是杰西卡的孩子,并且至少有一个孩子年龄在17岁和34岁;

父母1和父母2,因为他们都有一个名叫杰西卡的孩子,他们都有一个17岁的孩子。

你可以做两件事:

1。)

realm.where(Parent.class)  
     .equalTo("childrens.name","Jessica")
     .findAll()
     .where()
     .equalTo("childrens.age","17")
     .findAll();

2。)在儿童中,定义@LinkingObjects

public class Child extends RealmObject {
    @LinkingObjects("children")
    private final RealmResults<Parent> parents = null;
}

现在你可以根据孩子进行检查了:

RealmResults<Child> children = realm.where(Child.class).equalTo("name", "Jessica").equalTo("age", 17).findAll();
Child child = children.get(0);
RealmResults<Parent> parents = child.getParents(); // <-- parents of "Jessica, 17"

答案 1 :(得分:0)

使用hacky方式解决。

为孩子创建一个唯一的密钥,例如

Parent[0].Children[0].UniqueKey = name + "_" + age

并查询唯一键。