为什么无法取消对对象化实体列表的索引?
为了演示这个问题,我做了一个简单的示例项目。
我用的是实体
@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();
}
}
在数据存储中查找实体,您将获得以下信息:
尽管 passenger 字段有注释 @Unindex
它将被索引,正如在 google“数据存储”中所见。为什么注释 @Unindex
在这个例子中没有效果???
最佳答案
这与 Objectify 无关,似乎是数据存储的一些新怪癖。这可能只是 UI 中的显示故障。是否会导致问题?
使用您发布的代码,Objectify 将调用 Entity.saveUnindexedProperty()
在 passengers
上字段(即使没有 @Unindex
注释)。但是,即使 Objectify 尝试对其进行索引,从历史上看,您也无法对嵌入式对象进行索引,因此不清楚对它们的列表进行索引意味着什么。也许谷歌正在推出一些新行为,但他们还没有让 GUI 正常工作?或者他们的保存行为可能存在错误?
如果您想成为一个好公民,请使用低级 API(一个 Entity
包含类型为 List<EmbeddedEntity>
的属性)创建一个简单的测试用例,验证是否会发生同样的行为,并将错误提交到GAE 问题跟踪器。
关于google-app-engine - 如何在 Objectify 中取消索引列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42485539/