2015-12-09 3 views
1

Я использую objectify и хранилище данных Google Cloud.Objectify - все дочерние элементы данного родителя

Я ищу способ получить всех детей (без определенного типа или вида) родителя.

Я знаю функцию предка.

Я использовал этот

ofy().load().ancestor(entity).list(); 

это дать всем детям и внукам (я не хочу).

В этом Exemple А является родителем 1, 2 и 3. 1 является родительским м

 
    A 
/| \ 
1 2 3 
|  
m  

Хочу данные {1, 2, 3} не {1, 2 , 3, m}

Знаете ли вы способ получения более точного результата? (Без внуков)

ответ

2

Нет такого элегантного решения, и я подозреваю, что вы злоупотребляете @Parent. Должно быть очень, очень редко хочется создавать грандиозные отношения родителя в хранилище данных. Большинство иерархических отношений в хранилище данных лучше всего представлены традиционными отношениями с внешними ключами.

Но если вы определились, одним из решений является создание 1, 2 и 3 всех полиморфных объектов одного и того же общего вида. Таким образом, то вы можете запросить так:

ofy().load().type(BaseType.class).ancestor(parent) 

Еще одно преимущество наличия типа для запроса на то, что теперь вы можете применять фильтры (kindless запросы не могут иметь фильтры):

ofy().load().type(BaseType.class).ancestor(parent).filter("arbitraryField", value) 

Другой вариант , если значения, которые вы хотите исключить, являются редкими, - это просто их вытащить и отфильтровать.

0

Я думаю, что единственный способ создать индекс и использовать фильтр на родительской собственности. Параметр @parent добавит родительский ключ как часть дочернего ключа, поэтому по своей природе вы получите все спуска и нет простого способа, кроме фильтра для фильтрации.

+0

ok. В случае, когда я не знаю имя родительского поля. как я могу применить фильтр? Я имею в виду, что все дети имеют родительское свойство, но у них нет одинакового имени. В том же примере. Если в объекте 1 родитель называется «родительский», но в объекте 2 он называется «parentA» – Michael

+0

. Вы правы, поэтому у меня нет простого решения. Единственный способ для меня - запросить предок и проверить по рефлексии, если свойство равно родительскому родительскому объекту для удаления внуков. –

+0

Вы не можете '@ Index'' Parent'. Поля '@ Parent' не являются реальными свойствами, они являются частью ключа. – stickfigure

 Смежные вопросы

  • Нет связанных вопросов^_^