W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
Spring Data Cloud Spanner使用Cloud Spanner 父子交錯(cuò)表機(jī)制支持父子關(guān)系 。Cloud Spanner交錯(cuò)表強(qiáng)制一對(duì)多關(guān)系,并在單個(gè)域父實(shí)體的實(shí)體上提供有效的查詢和操作。這些關(guān)系最多可以達(dá)到7個(gè)層次。Cloud Spanner還提供了自動(dòng)級(jí)聯(lián)刪除或強(qiáng)制刪除父級(jí)之前的子實(shí)體。
盡管可以使用交錯(cuò)的父子表構(gòu)建在Cloud Spanner和Spring Data Cloud Spanner中實(shí)現(xiàn)一對(duì)一和多對(duì)多關(guān)系,但僅本地支持父子關(guān)系。Cloud Spanner不支持外鍵約束,盡管父子鍵約束在與交錯(cuò)表一起使用時(shí)會(huì)強(qiáng)制執(zhí)行類似的要求。
例如,以下Java實(shí)體:
@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; }
這些類可以對(duì)應(yīng)于一對(duì)現(xiàn)有的交錯(cuò)表。@Interleaved
批注可以應(yīng)用于Collection
屬性,并且內(nèi)部類型被解析為子實(shí)體類型。創(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)語(yǔ)句,這些語(yǔ)句使用與提供的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會(huì)刪除該歌手的所有專輯。另一種選擇是ON DELETE NO ACTION
,在此歌手要?jiǎng)h除所有歌手的專輯之后才能刪除。使用SpannerSchemaUtils
生成架構(gòu)字符串時(shí),spring.cloud.gcp.spanner.createInterleavedTableDdlOnDeleteCascade
布爾設(shè)置確定這些架構(gòu)是針對(duì)true
的ON DELETE CASCADE
還是針對(duì)false
的ON DELETE NO ACTION
生成的。
Cloud Spanner將這些關(guān)系限制為7個(gè)子層。一個(gè)表可能有多個(gè)子表。
在將對(duì)象更新或插入Cloud Spanner時(shí),其所有引用的子對(duì)象也將分別更新或插入同一請(qǐng)求中。在讀取時(shí),所有交錯(cuò)的子行也都被讀取。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: