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);
Помните, что в этом случае полученные вами поля должны быть проиндексированы.
Надеюсь это поможет.