如何在Objectify中取消索引列表?

时间:2017-02-27 12:12:25

标签: google-app-engine indexing entity objectify

为什么无法取消对客观化实体列表的索引?

为了演示这个问题,我做了一个简单的示例项目。

我使用了实体

@Entity
public class Car {
    @Id String id;
    @Unindex List<Passenger>  passengers;
}

一个对象

public class Passenger {
    String name;
}

并使用这种简单的方法保存它。

public class CarFactory {

    public void writeCarEntity() {
        Car car = new Car();
        car.setId("myCar");

        List<Passenger> passengers = new LinkedList<Passenger>();

        Passenger carl = new Passenger();    
        carl.setName("Carl");

        Passenger pete = new Passenger();
        pete.setName("Pete");

        Passenger jeff = new Passenger();
        jeff.setName("Jeff");

        passengers.add(carl);
        passengers.add(pete);
        passengers.add(jeff);

        car.setPassengers(passengers);

        ObjectifyService.register(car.getClass());
        ObjectifyService.ofy().save().entity(car).now();
    }
}

在数据存储区中查找实体,您将获得以下信息:

This is a screenshot from the Datastore

尽管乘客字段具有注释@Unindex,但它将被编入索引,正如人们可以在Google&#34;数据存储区&#34;中看到的那样。为什么注释@Unindex在此示例中没有效果???

1 个答案:

答案 0 :(得分:1)

这与Objectify无关,似乎是数据存储区的一些新怪癖。它可能只是UI中的显示故障。这会引起问题吗?

根据您发布的代码,Objectify会在Entity.saveUnindexedProperty()字段上调用passengers(即使没有@Unindex注释)。但即使Objectify试图对其进行索引,历史上你也无法对嵌入对象进行索引,因此不清楚索引它们列表的含义。也许谷歌推出了一些新的行为,他们还没有让GUI正常工作呢?或者他们的保存行为可能存在错误?

如果您想成为一个好公民,请使用低级API(Entity包含类型为List<EmbeddedEntity>的属性)创建一个简单的测试用例,验证是否发生了同样的行为,并且在GAE问题跟踪器中提交错误。