【问题标题】:Filtering by a ref's properties in App Engine using Objectify使用 Objectify 在 App Engine 中按引用的属性进行过滤
【发布时间】:2016-01-14 17:02:59
【问题描述】:

假设代码:

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

【问题讨论】:

    标签: java google-app-engine objectify


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您确认我的预感。您建议使用集合类型的事件字段或祖先查询听起来是完成此任务的好方法。
    猜你喜欢
    • 2014-11-01
    • 2012-12-06
    • 2012-10-15
    • 2016-06-21
    • 2012-08-22
    • 1970-01-01
    • 2012-06-14
    • 1970-01-01
    • 2014-10-21
    相关资源
    最近更新 更多