我在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合作,所以我做错了什么?
答案 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
注释了我的课程,问题得到解决。