0

Вот объяснение. У меня есть два объекта: Дом, Личность. В моей системе один человек может владеть несколькими домами, а один дом может иметь несколько владельцев. Поэтому я создаю таблицу (aka entity), называемую HouseOwnership. Я хочу, чтобы иметь возможность сделать два различных вида запросов к HouseOwnership:Как получить доступ к объектам от многих до многих отношений

  • Пусть даны houseId, получить все это владельцы
  • Учитывая PersonId, получить все дома принадлежат

Так HouseOwnership , я

@Entity 
class HouseOwnership{ 
    @Load 
    private Ref<House> houseRef; 
    @Load 
    private Ref<Person> personRef; 
} 

Как мне сделать мои запросы с OfyService.ofy()?

я соблазн сделать

owners =OfyService.ofy().load().type(HouseOwnership.class).ancestor(house).list() 

и

houses =OfyService.ofy().load().type(HouseOwnership.class).ancestor(person).list() 

, но для этого я должен был бы сделать обе ссылки в @Parent. Так я могу это сделать? Как сделать запросы?

Также у меня есть только идентификаторы, а не фактические объекты, поэтому мне пришлось бы создавать объекты из идентификаторов, которые я могу сделать. Но мне интересно, есть ли более простой способ?

ответ

1
  1. Сущность может иметь только одного родителя.

  2. Вам не нужно, чтобы ваша организация HouseOwnership была дочерью любого лица.

  3. Вы делаете простой запрос, чтобы получить все объекты HouseOwnership, где свойство houseRef равно заданному ключу дома, или свойство personRef равно заданному ключу Person или и тому и другому.

  4. Вы всегда можете сделать ключ от идентификатора для лиц, у которых нет родителей.

0

Вы почти наверняка хотите смоделировать это как собственность @Index Set<Ref<Person>> owners; на Дом. Создание объекта дополнительной связи создает значительную часть накладных расходов.

Не пытайтесь отображать схемы буквально из реляционных моделей - используйте структуру документа в своих интересах.