Google app engine 如何使用JDO查询AppEngine中的单个字段
我有一个产品POJO,看起来像Google app engine 如何使用JDO查询AppEngine中的单个字段,google-app-engine,jdo,Google App Engine,Jdo,我有一个产品POJO,看起来像 @PersistenceCapable(identityType = IdentityType.APPLICATION) public class Product extends AbstractModel { @Persistent private String name; @Persistent private Key homePage; @Persistent private Boolean feature
@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;
}
}
我的数据存储当前完全为空
我想检索产品的所有主页键
我正在努力
PersistenceManager persistenceManager = getPersistenceManager();
Query query = persistenceManager.newQuery("SELECT homePage FROM " + getModelClass());
query.setFilter("featured == true");
List<Key> productPageKeys = (List<Key>) query.execute();
PersistenceManager PersistenceManager=getPersistenceManager();
Query Query=persistenceManager.newQuery(“从“+getModelClass()中选择主页”);
setFilter(“featured==true”);
List productPageKeys=(List)query.execute();
然而,这给了我一个空指针错误。我应该如何构造这个查询
干杯,
Peter实体在数据存储中存储为序列化的数据块,因此无法从实体中检索和返回单个字段。您需要获取整个实体,并提取您关心的字段。要进行投影,您可以执行以下操作
Query q = pm.newQuery("SELECT myField FROM mydomain.MyClass WHERE featured == true");
List<String> results = (List<String>)q.execute();
Query q=pm.newQuery(“从mydomain.MyClass中选择myField,其中featured==true”);
List results=(List)q.execute();
其中String是我的字段的类型。任何基本的JDO文档都会定义这一点。
在内部,GAE/J将检索实体,然后在将其返回给用户之前的后处理中,它将被操纵到所需的投影中
正如Nick在另一个回复中指出的那样,这并没有给自己带来性能上的提升。。。但是,标准持久性API的全部要点是保护您不受必须进行这种提取的数据存储细节的影响;它都是开箱即用的。您混合了单字符串JDOQL和编程JDOQL。如果指定执行pm.newQuery的字符串(“从mydomain.MyModelClass中选择homePage,其中featured==true”);Nick,ProjectionResultTransformer自2009年以来一直存在,用于将实体转换为单个字段(因此支持JDOQL/JPQL中的投影)@DataNucleus我不知道AppEngine是否支持这一点,但关键是它仍然会导致从数据存储中获取和解码整个实体-因此,如果目标是提高性能,就没有任何好处。是的,这就是关键。我认为这是在将hibernate样式映射到数据存储中的列。显示我被屏蔽的程度。=)即使没有性能方面的原因,我还是更喜欢这种方法。@DataNucleus,如果MyClass中有多个字符串字段,而我只想检索其中一个字段,该怎么办?