Spring Cloud Cloud Spanner 關(guān)系

2024-01-11 14:54 更新

Spring Data Cloud Spanner使用Cloud Spanner 父子交錯表機(jī)制支持父子關(guān)系 。Cloud Spanner交錯表強(qiáng)制一對多關(guān)系,并在單個域父實體的實體上提供有效的查詢和操作。這些關(guān)系最多可以達(dá)到7個層次。Cloud Spanner還提供了自動級聯(lián)刪除或強(qiáng)制刪除父級之前的子實體。

盡管可以使用交錯的父子表構(gòu)建在Cloud Spanner和Spring Data Cloud Spanner中實現(xiàn)一對一和多對多關(guān)系,但僅本地支持父子關(guān)系。Cloud Spanner不支持外鍵約束,盡管父子鍵約束在與交錯表一起使用時會強(qiáng)制執(zhí)行類似的要求。

例如,以下Java實體:

@Table(name = "Singers")
class Singer {
  @PrimaryKey
  long SingerId;

  String FirstName;

  String LastName;

  byte[] SingerInfo;

  @Interleaved
  List<Album> albums;
}

@Table(name = "Albums")
class Album {
  @PrimaryKey
  long SingerId;

  @PrimaryKey(keyOrder = 2)
  long AlbumId;

  String AlbumTitle;
}

這些類可以對應(yīng)于一對現(xiàn)有的交錯表。@Interleaved批注可以應(yīng)用于Collection屬性,并且內(nèi)部類型被解析為子實體類型。創(chuàng)建它們所需的架構(gòu)也可以使用SpannerSchemaUtils生成,并使用SpannerDatabaseAdminTemplate執(zhí)行:

@Autowired
SpannerSchemaUtils schemaUtils;

@Autowired
SpannerDatabaseAdminTemplate databaseAdmin;
...

// Get the create statmenets for all tables in the table structure rooted at Singer
List<String> createStrings = this.schemaUtils.getCreateTableDdlStringsForInterleavedHierarchy(Singer.class);

// Create the tables and also create the database if necessary
this.databaseAdmin.executeDdlStrings(createStrings, true);

createStrings列表包含表架構(gòu)語句,這些語句使用與提供的Java類型兼容的列名稱和類型,以及根據(jù)配置的自定義轉(zhuǎn)換器包含在其中的任何已解析子關(guān)系類型。

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;

ON DELETE CASCADE子句表示如果刪除歌手,則Cloud Spanner會刪除該歌手的所有專輯。另一種選擇是ON DELETE NO ACTION,在此歌手要刪除所有歌手的專輯之后才能刪除。使用SpannerSchemaUtils生成架構(gòu)字符串時,spring.cloud.gcp.spanner.createInterleavedTableDdlOnDeleteCascade布爾設(shè)置確定這些架構(gòu)是針對trueON DELETE CASCADE還是針對falseON DELETE NO ACTION生成的。

Cloud Spanner將這些關(guān)系限制為7個子層。一個表可能有多個子表。

在將對象更新或插入Cloud Spanner時,其所有引用的子對象也將分別更新或插入同一請求中。在讀取時,所有交錯的子行也都被讀取。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號