Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine 如何使用JDO查询AppEngine中的单个字段_Google App Engine_Jdo - Fatal编程技术网

Google app engine 如何使用JDO查询AppEngine中的单个字段

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

我有一个产品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;
    }
}
我的数据存储当前完全为空

我想检索产品的所有主页键

我正在努力

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中有多个字符串字段,而我只想检索其中一个字段,该怎么办?