为什么无法取消对客观化实体列表的索引?
为了演示这个问题,我做了一个简单的示例项目。
我使用了实体
@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();
}
}
在数据存储区中查找实体,您将获得以下信息:
尽管乘客字段具有注释@Unindex
,但它将被编入索引,正如人们可以在Google&#34;数据存储区&#34;中看到的那样。为什么注释@Unindex
在此示例中没有效果???
答案 0 :(得分:1)
这与Objectify无关,似乎是数据存储区的一些新怪癖。它可能只是UI中的显示故障。这会引起问题吗?
根据您发布的代码,Objectify会在Entity.saveUnindexedProperty()
字段上调用passengers
(即使没有@Unindex
注释)。但即使Objectify试图对其进行索引,历史上你也无法对嵌入对象进行索引,因此不清楚索引它们列表的含义。也许谷歌推出了一些新的行为,他们还没有让GUI正常工作呢?或者他们的保存行为可能存在错误?
如果您想成为一个好公民,请使用低级API(Entity
包含类型为List<EmbeddedEntity>
的属性)创建一个简单的测试用例,验证是否发生了同样的行为,并且在GAE问题跟踪器中提交错误。