我在 Google App Engine 上使用 Objectify 5.1.1。我定义了一个名为 Insight 的 Objectify 实体,并尝试通过名为 Downloaded 的 boolean 属性来查询它。但是,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
属性显示“false(未索引)”而不是简单的“false”。
我很确定这曾经适用于 Objectify 3.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
注释了我的类,问题得到了解决。
关于java - Objectify 找不到似乎存在的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27326754/