【问题标题】:How to filter queries in GQL with Entities created by objectify?如何使用objectify创建的实体过滤GQL中的查询?
【发布时间】:2013-12-04 06:02:43
【问题描述】:

我在数据存储查看器中有名为 MACObs 的下表:

ID/Name         accessPoint             mac                     obs
id=42310053     xx:xx:xx:xx:xx:xx       yy:yy:yy:yy:yy:yy       302 bytes, SHA-1 = 031688dc48d2e71bc80b1c16016cbb108c5af3e7

所以现在我想我可以像这样进行 GQL 查询:

SELECT * FROM MACObs WHERE accessPoint = 'xx:xx:xx:xx:xx:xx'

但是当我运行这个查询时,我只得到这个答案:

No results in Empty namespace.

说我在后端使用 objectify 创建实体可能很重要。

【问题讨论】:

  • 应该可以的。一个问题: accessPoint 是 TEXT 类型还是 String 类型? TEXT 类型默认不被索引。
  • 这是一个字符串。并且在 objectify 中也是如此。
  • 您正在数据存储查看器中尝试此查询,但它没有返回任何结果。除了值不匹配之外,我不太清楚为什么?
  • 是的,我正在数据存储查看器中尝试此操作,因为我想在我的 objectify 表达式中找到我的失败,如下所示:ObjectifyService.ofy().load().type(MACObs.class)。 filter("accessPoint", macOfAP) 其中 macOfAP 是一个字符串,我可以在数据存储查看器中找到它。
  • 您能通过 Objectify 注释向我展示您的实体定义吗?

标签: google-app-engine google-cloud-datastore objectify


【解决方案1】:

好的。这是来自 Objectify 的文档“Objectify 默认情况下不索引属性。您必须使用 @Index 注释显式定义单属性索引。”

所以尝试以下方法:将 @Index 注释添加到您的 accessPoint 属性。

所以你的定义会变成:

@Entity 
public class MACObs { 
  @Id private Long id; 
  private String mac; 
  @Index private String accessPoint; 
  @Serialize private ArrayList<Long[]> obs; 
  ...
  getter/setter methods
  ...
}

【讨论】:

  • 好的!非常感谢!
  • 解决问题了吗?
  • 是的。我以前只使用过 postgres 和 hibernate,这样的东西对我来说是新的。
猜你喜欢
  • 2011-01-01
  • 2018-03-14
  • 2012-08-22
  • 1970-01-01
  • 2014-02-21
  • 2019-10-11
  • 2013-01-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多