【问题标题】:Objectify can't find entity that appears to existObjectify 找不到似乎存在的实体
【发布时间】:2014-12-06 00:15:57
【问题描述】:

我在 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 属性显示“false(未索引)”而不是简单的“false”。

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

【问题讨论】:

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


    【解决方案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 注释了我的班级,问题就解决了。

    【讨论】:

    • 确实,您只能使用带有索引属性的查询。但是,您不需要为所有内容编制索引(=将@Index 放在类级别上),您可以并且可能应该针对每个属性进行索引。 code.google.com/p/objectify-appengine/wiki/Queries 解释了你所有的选择。
    猜你喜欢
    • 1970-01-01
    • 2011-10-17
    • 2021-10-21
    • 1970-01-01
    • 2018-11-24
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多