Objectify找不到似乎存在的实体

时间:2014-12-06 00:15:57

标签: java google-app-engine objectify google-cloud-datastore

我在Google App Engine上使用Objectify 5.1.1。我已经定义了一个名为Insight的Objectify实体,并试图通过名为下载的布尔属性来查询它。但是,Objectify无法找到这个实体。

以下是我尝试进行查询的方式:

Query<Insight> insightQueryTemplate = ofy().load().type(Insight.class).
                filter("downloaded", false).first().safe();

这是Insight的精简课程定义:

@com.googlecode.objectify.annotation.Entity
public class Insight {
    @com.googlecode.objectify.annotation.Id 
    public Long id;

    public boolean downloaded = false;

    public Insight () { }

}

当我查看开发服务器的数据存储区时,我可以看到实体确实存在,但downloaded属性表示&#34; false(未编入索引)&#34;而不仅仅是&#34; false&#34;。

我很确定这曾经与Objectify 3.1合作,所以我做错了什么?

1 个答案:

答案 0 :(得分:1)

我认为标签@com.googlecode.objectify.annotation.Index需要在类上注释:

@com.googlecode.objectify.annotation.Entity
public class Insight {
    @com.googlecode.objectify.annotation.Id 
    public Long id;

    @com.googlecode.objectify.annotation.Index  // *** This was missing ***
    public boolean downloaded = false;

    public Insight () { }

}

根据https://cloud.google.com/appengine/docs/java/datastore/indexes#Java_Unindexed_properties,属性设置为setProperty()setUnindexedProperty()。但是当前documentation for Objectify表示默认情况下属性设置为未编入索引。

所以我用@com.googlecode.objectify.annotation.Index注释了我的课程,问题得到解决。