子域java链查询

子域java链查询,java,realm,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 = Jess

这是有孩子的父母样本

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
我只是想让父母给我一个17岁的孩子取名杰西卡

当我试着

realm.where(Parent.class).beginGroup().equalTo("childrens.name","Jessica").equalTo("childrens.age","17").endGroup().findAll();
它把父母双方都还给了我,因为第二个父母有17岁的孩子&名叫杰西卡。如何仅获取第一个父级?

链接查询意味着“在条件为真的情况下,至少有一个X”

那么你的问题呢

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

“如果父母至少有一个孩子的名字是杰西卡,并且至少有一个孩子的年龄是17岁,请告诉我父母”

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


你可以做两件事:

1.)

2.)在子对象中,定义
@LinkingObjects

public class Child extends RealmObject {
    @LinkingObjects("children")
    private final RealmResults<Parent> parents = null;
}
公共类子级扩展RealmObject{
@链接对象(“子对象”)
private final RealmResults 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"
RealmResults children=realm.where(Child.class).equalTo(“name”,“Jessica”).equalTo(“age”,17).findAll();
Child=children.get(0);

RealmResults parents=child.getParents();// 用一种老套的方法解决

为子项创建唯一密钥,例如

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

并查询唯一密钥。

从技术上讲,这可能与排除kotlin的方法重复。不幸的是,第一种解决方案在我的情况下不起作用。第一个findAll返回双亲,因为他们都有孩子Jessica,第二个findAll也将返回双亲,因为他们都有17岁的孩子。我将尝试@LinkingObjects。
Parent[0].Children[0].UniqueKey = name + "_" + age