【问题标题】:GCP 数据存储区查询嵌套实体引用 (entityB.name)
【发布时间】:2020-11-26 00:17:13
【问题描述】:

我无法确定 GCP 数据存储区是否支持查询实体的嵌套属性。

我现在的用例是这样的:

Module
  -> Application

模块

应用

@Entity
class Module {
  Long id;

  @Reference
  Applicaiton application;
}
@Entity
class Application {
  Long id;
  String name;
}

我想尝试根据嵌套的 Application 名称查询模块。我试过像这样提供过滤器但没有成功:

Query<? extends BaseEntity> query = Query.newEntityQueryBuilder()
    .setKind("module") 
    .setFilter(PropertyFilter.eq("application.name", "UserApp"))
    .build();

我正在通过他们的 DatastoreTemplate 使用 Springs GCP 数据存储抽象,但这似乎并不相关,因为当我尝试在 GCP 控制台上运行 GQL 时,我也没有得到任何结果。

SELECT * FROM module WHERE application.name = "UserApp"

感谢您花时间阅读本文。非常感谢您提供任何帮助!

【问题讨论】:

  • 嗨@BenDol 我建议您查看官方文档here 以检查您的查询与官方查询之间的差异。能否请您单独检查一下,您是否可以正确查询他们的数据?
  • 嗨@gso_gabriel,在向 Stackoverflow 寻求帮助之前,我已经完成了您建议的两件事。答案是肯定的,我已经检查了差异,没有,是的,可以从每种类型中单独查询数据。

标签: java google-cloud-platform google-cloud-datastore datastore spring-cloud-gcp


【解决方案1】:

看起来您使用的是Reference,而不是嵌入式实体。模块中的应用程序实际上是对应用程序实体的关键引用。因此,应用程序的值不是模块实体上的索引。

【讨论】:

  • 在这种情况下该怎么办?
  • 获取 UserApp Application 实体的密钥并对其进行查询。
  • 这是方式......但我正在寻找与关系数据库相同的过滤方式
  • Cloud Datastore 不是关系数据库。查询受到限制,因此查询时间与结果集的大小成正比,而不是与限制查询能力的数据集的大小成正比。
猜你喜欢
  • 2018-07-01
  • 2018-07-09
  • 2021-10-25
  • 1970-01-01
  • 1970-01-01
  • 2012-04-04
  • 2013-10-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多