我有一个看起来像的产品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目前已完全清空。
我想检索产品的特色为true的所有homePage键。
我正在尝试
PersistenceManager persistenceManager = getPersistenceManager();
Query query = persistenceManager.newQuery("SELECT homePage FROM " + getModelClass());
query.setFilter("featured == true");
List<Key> productPageKeys = (List<Key>) query.execute();
然而,这给了我一个空指针错误。我该如何构建此查询?
干杯, 彼得
答案 0 :(得分:3)
要进行投影,您可以执行类似
的操作Query q = pm.newQuery("SELECT myField FROM mydomain.MyClass WHERE featured == true");
List<String> results = (List<String>)q.execute();
其中String是我的字段的类型。任何基本的JDO文档都会定义它。 内部GAE / J将检索实体,然后在将其返回给用户之前的后处理中,它被操纵到您需要的投影中。
正如尼克在另一篇回复中所指出的那样,这并没有比自己做的那样没有性能提升......但是标准持久性API的重点是保护你免受这种数据存储特定的必须进行这样的提取;这一切都是开箱即用的。
答案 1 :(得分:0)
实体存储为数据存储区中的序列化数据blob,因此无法从实体检索并返回单个字段。您需要获取整个实体,并提取您自己关心的字段。