假设代码:
@Entity
public class MyEvent {
@Id Long id;
@Index String name;
Ref<Location> myLocation;
}
@Entity
public class Location {
@Id Long id;
@Index String city;
@Index String country;
}
我有办法过滤器查找特定城市内的所有活动吗?这似乎需要一个不受支持的连接,但我想仔细检查,因为我找不到明确的答案。
此外,如果无法进行此类过滤,那么构建数据的正确方法是什么?我是否需要一个非规范化的MyEvent实体,其中包含我可以过滤的所有字段?
答案 0 :(得分:0)
正如您在Objectify documentation中所读到的,Ref属性更像是Objectify糖而不是数据存储区功能。它们作为密钥属性存储在数据存储区中,因此无法查询密钥可能指向的实体的属性。
如果要查询城市内的事件,可以将事件的城市存储在事件本身上并查询该城市,或查询城市中的所有位置,然后查询与这些位置匹配的任何事件(即,通过查询存储在事件上的位置键。第三种选择是将城市变为具有事件的集合类型字段的实际实体。您还可以使用祖先查询 - 有关详细信息,请参阅“Datastore Queries”文档。