W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
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)是針對true
的ON DELETE CASCADE
還是針對false
的ON DELETE NO ACTION
生成的。
Cloud Spanner將這些關(guān)系限制為7個子層。一個表可能有多個子表。
在將對象更新或插入Cloud Spanner時,其所有引用的子對象也將分別更新或插入同一請求中。在讀取時,所有交錯的子行也都被讀取。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: