微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Spring Data Spanner 按交错表字段查询

如何解决使用 Spring Data Spanner 按交错表字段查询

我正在尝试使用 Spring Data Spanner 按交错表的字段进行查询。 id 比较由 Spring Data Spanner 在执行 ARRAY STRUCT 内连接时自动完成,但我无法向交错表查询添加 WHERE 子句。

考虑以下示例:

CREATE TABLE Singers (
  Id   INT64 NOT NULL,FirstName  STRING(1024),LastName   STRING(1024),SingerInfo BYTES(MAX),) PRIMARY KEY (Id);

CREATE TABLE Albums (
  SingerId     INT64 NOT NULL,Id           INT64 NOT NULL,AlbumTitle   STRING(MAX),) PRIMARY KEY (SingerId,Id),INTERLEAVE IN PARENT Singers ON DELETE CASCADE;

假设我想查询 AlbumTitle 为“Fear of the Dark”的所有 Singer,我该如何编写存储库方法来使用 Spring Data Spanner 实现这一点?

解决方法

你的例子似乎要么包含几个错别字,要么不完全正确:

  1. Singers 表有一个列 Id,它是主键。这本身很好,但是在创建交错表的层次结构时,建议在主键列前加上表名。因此最好将其命名为 SingerId
  2. Albums 表有一个 SingerId 列和一个 Id 列。这两列构成了 Albums 表的主键。这在技术上是不正确的(并且令人困惑),也是我认为您的示例不完全正确的原因。由于 AlbumsSingers 中交错,因此 Albums 必须包含与 Singers 表相同的主键列,以及构成 {{ 主键的任何附加列1}}。在这种情况下,Albums 引用了 Id 表,而 SingersSingerId 表中的一个附加列使用 Albums。父表的主键列也必须以与父表相同的顺序出现。

因此应将示例数据模型更改为:

Singers

从现在开始,您可以将 CREATE TABLE Singers ( SingerId INT64 NOT NULL,FirstName STRING(1024),LastName STRING(1024),SingerInfo BYTES(MAX),) PRIMARY KEY (SingerId); CREATE TABLE Albums ( SingerId INT64 NOT NULL,AlbumId INT64 NOT NULL,AlbumTitle STRING(MAX),) PRIMARY KEY (SingerId,AlbumId),INTERLEAVE IN PARENT Singers ON DELETE CASCADE; 表中的 SingerId 列视为与 Albums 的外键关系,并像在任何其他数据库系统中一样对待它。另请注意,每个歌手可以有多个专辑,因此查询 ...我想查询 AlbumTitle 为“Fear of the Dark” 的所有歌手有点不明确。我宁愿说:

给我所有至少有一张专辑名为“Fear of the Dark”的歌手

一个有效的查询是:

Singer

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。