Я боролся с этим некоторое время, но следующее будет работать! Короткий ответ заключается в том, что JDO, используемый с App Engine, может определенно поддерживать запросы Ancestor, поэтому вам не нужно прибегать к низкоуровневому API, уникальному для App Engine, особенно в случае, когда вы хотите придерживаться JDO во всем приложении.
Шаг 1:
В дочернем классе убедитесь, что указана следующая переменная экземпляра. Фактическое имя переменной не имеет значения. Что важно, так это аннотация.
@Persistent
@Extension(vendorName="datanucleus", key="gae.parent-pk", value="true")
private String mParentEncKey;
Шаг 2:
При запросе дочернего объекта (объектов) по родительскому ключу вы хотите затем выполнить фильтрацию parentKey по имени созданной вами переменной экземпляра ... в этом случае Этот пример предназначен для того, чтобы запросить набор дочерних объектов, которые имеют свойство, учитывая, что вы знаете родительский ключ и это свойство.
public static List<ChildObject> queryYourChildObjects(String parentKey, String someProperty) {
PersistenceManager pm = PMF.get().getPersistenceManager();
Query q = pm.newQuery(ChildObject.class);
q.setFilter("mParentEncKey == parentKeyParam && property == propertyParam");
q.declareParameters("String parentKeyParam, String propertyParam");
List<ChildObject> results = (List<ChildObject>) q.execute(parentKey, someProperty);
return results;
}
Вот и все! Надеюсь, это поможет.