Вложенные группы сущностей в хранилище данных HRD

Я использую вложенные группы сущностей в хранилище данных движка приложений Google HRD.

A ‹B‹ C с учетом X ‹Y означает, что X является родителем Y

Все ли C находятся в одной группе сущностей (A one)?

Я хочу запросить все C, у которых есть один и тот же родитель A. Как мне это сделать?

Это не удается: SELECT * FROM C WHERE ANCESTOR IS Key ('A', 1)

Есть подсказка?

Тест был выполнен прямо в GQL в хранилище данных, тем не менее, я прилагаю фрагмент кода (код Ofy4):

Это:

@Entity
@Cache
public class Site implements Serializable {
   private static final long serialVersionUID = 8611281648072797702L;

   @Id
   private Long id;
   private String url;
   ...
}

То есть B:

@Entity
@Cache
public class Accom implements Serializable, HasCapacity {

   @Id
   private Long id;
   @Parent
   private Key<Site> site;
   ...
}

Это C:

@Entity
@Cache
public class Room implements Serializable, HasCapacity {

   @Id
   private Long id;
   @Parent
   private Key<Accom> accom;
   ...
}

person Jordi P.S.    schedule 19.03.2012    source источник
comment
Каким образом он «не работает»? Выдает ли он исключение или не возвращает объекты, которые, как вы знаете, находятся в базе данных? Что-то другое?   -  person Adam Crossland    schedule 19.03.2012
comment
Добавляя к тому, что сказал Адам: можете ли вы опубликовать фрагмент кода, в котором вы выполняете запрос, и трассировку стека (если сбой является исключением)   -  person alex    schedule 19.03.2012
comment
Нет никакого отказа. Код не возвращает никакого результата. Я тестирую GQL прямо в prod.   -  person Jordi P.S.    schedule 19.03.2012
comment
Пожалуйста, укажите точный GQL, который вы выполняете - почти наверняка что-то не так в формулировке запроса.   -  person stickfigure    schedule 20.03.2012
comment
SELECT * FROM Room WHERE ANCESTOR IS Key ('Site', 1) не работает, а SELECT * WHERE ANCESTOR IS Key ('Site', 1) также не возвращает никакую комнату.   -  person Jordi P.S.    schedule 20.03.2012


Ответы (2)


Согласно документации Google это должно работать.

и http://code.google.com/appengine/docs/python/datastore/queries.html

Запросы предков

Вы можете отфильтровать запросы к хранилищу данных по указанному предку, чтобы результаты содержали только объекты, содержащие этого предка. Другими словами, все результаты будут иметь предка в качестве своего родителя, или родителя родителя и т. Д. Передача None в качестве параметра не запрашивает сущности без предков и будет возвращать ошибки.

Другие ссылки с полезной информацией: http://code.google.com/appengine/docs/python/datastore/gqlreference.html#Examples http://code.google.com/appengine/docs/python/datastore/entities.html

person egonzal    schedule 19.03.2012
comment
Думаю то же самое но это не так :( - person Jordi P.S.; 19.03.2012

Задача решена:

Проблема заключалась в том, что при создании C родительский ключ был создан неправильно. Родительским ключом для C был K (B), и предполагается, что он должен быть K (A, B), всегда содержащим родительский ключ.

Это похоже на то, что на группу сущностей можно ссылаться. Ссылка на A необходима, поскольку существует только одна группа сущностей, несмотря на вложенность.

person Jordi P.S.    schedule 22.03.2012