Datastore Google App Engine запросить конкретное поле и без дочернего

Я пытаюсь оптимизировать свой GAE. Это моя модель:

Игра: идентификатор, статус, игроки... и список;
Раунд: id, name, desc ...;

У меня есть отношения между игрой и раундом: 1-N

Проблема в том, что я не могу запросить Игру без его полного раунда или определенного поля.

Я уже пробовал это:

Query query = pm.newQuery(Game.class);
ArrayList<Game> allgame = new ArrayList<Game>();
query.setResult("id, status");
allgame.addAll((Collection<? extends Game>) query.execute());

а также

Query query = pm.newQuery("SELECT id, status FROM com.ws.model.Game");
ArrayList<Object> allgame = new ArrayList<Object>();
allgame.addAll((Collection<? extends Object>) query.execute());

Я использую PersistenceManagerFactory и JDO v1. Я действительно хочу уменьшить свои расходы на чтение, не запрашивая всех детей (Раунд)

Спасибо

1 ответ

Решение

Когда объект извлекается из хранилища данных с помощью JDO, извлекается только вызываемая группа выборки. Неиндексированные свойства, включая Text и Blob, не извлекаются по умолчанию. Это означает, что сериализованные значения полей (как ваши круглые объекты) не будут получены по умолчанию. Это называется отложенной загрузкой.*

Чтобы получить только определенных друзей, вы можете использовать запрос, подобный следующему:

        query = pm.newQuery("SELECT status, players FROM " +
                Game.class.getName() + " WHERE xy == :xy);

Помните, что в этом случае полученные вами поля должны быть проиндексированы.

Надеюсь это поможет.

* REF: Google App Engine Разработка Java и GWT приложений

Другие вопросы по тегам