0

У меня есть пара объектов хранилища данных, которые существуют во многих отношениях ко многим, где у родителя есть список ссылок на детей. Мы используем Objectify.Datastore запрос родителей во многих-ко-многим ссылках referencehop

@Entity 
@Cache 
public class Parent { 
    @Index 
    String name; 

    private List<Ref<Child>> children; 
...getters/setters etc... 
} 

@Entity 
@Cache 
public class Child { 
    @Index 
    String name; 
...getters/setters etc... 
} 

Мне нужно получить список всех детей и список всех родителей для каждого ребенка. Это правильный способ настроить мои отношения? Как выглядит запрос?

Я могу получить список всех детей и список всех родителей, а затем прокрутить каждый, чтобы увидеть, какие отношения существуют, но мне интересно, есть ли лучший подход.

+0

У вашего вопроса есть противоречие. «список всех детей» и «список всех родителей для каждого ребенка» означает отношение «многие ко многим». –

+0

Вы правы. Я уточню свой вопрос. Это то, что происходит, когда вы не обращаете внимания. – Gremash

ответ

0

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

Есть только две проблемы, которые вы должны иметь в виду:

  1. индексировании свойство, которое представляет собой список значений может быть сложно - читать о взрывающихся индексов. Если у этого объекта есть много других индексированных полей, это не очень хороший вариант.

  2. Каждый раз, когда вы обновляете отношения, каждое индексированное свойство в этом объекте должно быть переписано, что может быть очень дорого, если отношения обновляются часто и/или у вас есть другие индексированные свойства в этом объекте.

Если вы столкнулись с этими проблемами, вы можете подумать о создании новой сущности «Отношения» с одним индексированным свойством для идентификатора ребенка. Этот объект может быть дочерним объектом родительского объекта. С помощью этого подхода вы можете получить список всех дочерних элементов, выполнив запрос предка на объекте «Отношения», и вы можете получить список всех родителей, выполнив простой запрос на объекте «Связь» с фильтром для соответствия идентификатору ребенка (идентификатор родителя можно извлечь от объектов, возвращаемых этим запросом, путем вызова getParent().getId()).

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