Как запросить одно поле в AppEngine с помощью JDO - PullRequest
2 голосов
/ 11 августа 2011

У меня есть продукт POJO, который выглядит так.

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Product extends AbstractModel {
    @Persistent
    private String name;

    @Persistent
    private Key homePage;

    @Persistent
    private Boolean featured;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Key getHomePage() {
        return homePage;
    }

    public void setHomePage(Key homePage) {
        this.homePage = homePage;
    }

    public boolean isFeatured() {
        return featured;
    }

    public void setFeatured(Boolean featured) {
        this.featured = featured;
    }
}

Мой DataStore в настоящее время полностью пуст.

Я бы хотел получить все ключи homePage, если это верно для Продукта.

Я пытаюсь

PersistenceManager persistenceManager = getPersistenceManager();
Query query = persistenceManager.newQuery("SELECT homePage FROM " + getModelClass());
query.setFilter("featured == true");

List<Key> productPageKeys = (List<Key>) query.execute();

Однако это дает мне ошибку нулевого указателя. Как мне построить этот запрос?

Cheers, Питер

Ответы [ 2 ]

3 голосов
/ 11 августа 2011

Чтобы сделать прогноз, вы должны сделать что-то вроде

Query q = pm.newQuery("SELECT myField FROM mydomain.MyClass WHERE featured == true");
List<String> results = (List<String>)q.execute();

где String - это тип моего поля. Любая базовая документация JDO будет определять это. Внутренне GAE / J будет извлекать сущность, а затем при последующей обработке перед возвратом ее пользователю она обрабатывается в требуемой проекции.

Как Ник указал в другом ответе, это не дает выигрыша в производительности по сравнению с выполнением этого самостоятельно ... но тогда весь смысл стандартного API персистентности состоит в том, чтобы оградить вас от таких особенностей хранилища данных, связанных с необходимостью такого извлечения; это все предоставляется из коробки.

0 голосов
/ 11 августа 2011

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

...