使用Objectify通过App Engine中的ref属性进行过滤

时间:2016-01-14 17:03:00

标签: java google-app-engine objectify

假设代码:

@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实体,其中包含我可以过滤的所有字段?

1 个答案:

答案 0 :(得分:0)

正如您在Objectify documentation中所读到的,Ref属性更像是Objectify糖而不是数据存储区功能。它们作为密钥属性存储在数据存储区中,因此无法查询密钥可能指向的实体的属性。

如果要查询城市内的事件,可以将事件的城市存储在事件本身上并查询该城市,或查询城市中的所有位置,然后查询与这些位置匹配的任何事件(即,通过查询存储在事件上的位置键。第三种选择是将城市变为具有事件的集合类型字段的实际实体。您还可以使用祖先查询 - 有关详细信息,请参阅“Datastore Queries”文档。