Цепочка запросов java для детей - PullRequest
0 голосов
/ 22 мая 2018

Вот пример родителей с детьми

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 лет по имени Джессика.Как я могу получить только 1-го родителя?

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Решено с помощью хакерского способа.

Создайте уникальный ключ для ребенка, например,

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

и запросите уникальный ключ.

0 голосов
/ 22 мая 2018

Запрос ссылки означает «имеет хотя бы один из X, где условие истинно»

Таким образом, ваш запрос

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

говорит,

«дать мне родителей, где родителиимеет по крайней мере одного из детей с именем Джессика, И имеет по крайней мере одного из детей с возрастом 17 "

, который является родителем 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...