W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
通過(guò)@Descendants
注釋支持父子關(guān)系。
與嵌入式子代不同,后代是駐留在自己種類中的完整實(shí)體。父實(shí)體沒(méi)有額外的字段來(lái)保存后代實(shí)體。相反,該關(guān)系是在后代的鍵中捕獲的,該鍵引用了它們的父實(shí)體:
import org.springframework.cloud.gcp.data.datastore.core.mapping.Descendants; import org.springframework.cloud.gcp.data.datastore.core.mapping.Entity; import org.springframework.data.annotation.Id; @Entity("orders") public class ShoppingOrder { @Id long id; @Descendants List<Item> items; } @Entity("purchased_item") public class Item { @Id Key purchasedItemKey; String name; Timestamp timeAddedToOrder; }
例如,Item
的GQL鍵文字表示形式的實(shí)例還將包含父ShoppingOrder
ID值:
Key(orders, '12345', purchased_item, 'eggs')
父級(jí)ShoppingOrder
的GQL鍵文字表示為:
Key(orders, '12345')
Cloud Datastore實(shí)體以各自的種類單獨(dú)存在。
ShoppingOrder
:
{ "id" : 12345 }
該訂單中的兩個(gè)項(xiàng)目:
{ "purchasedItemKey" : Key(orders, '12345', purchased_item, 'eggs'), "name" : "eggs", "timeAddedToOrder" : "2014-09-27 12:30:00.45-8:00" } { "purchasedItemKey" : Key(orders, '12345', purchased_item, 'sausage'), "name" : "sausage", "timeAddedToOrder" : "2014-09-28 11:30:00.45-9:00" }
使用Datastore的祖先關(guān)系將對(duì)象的父子關(guān)系結(jié)構(gòu)存儲(chǔ)在Cloud Datastore中。 因?yàn)檫@些關(guān)系是由Ancestor機(jī)制定義的,所以在父實(shí)體或子實(shí)體中都不需要額外的列來(lái)存儲(chǔ)此關(guān)系。關(guān)系鏈接是后代實(shí)體鍵值的一部分。這些關(guān)系可能很深層次。
擁有子實(shí)體的Properties必須類似于集合,但是它們可以是常規(guī)屬性(如List
,數(shù)組,Set
等)支持的任何受支持的可相互轉(zhuǎn)換的集合類類型。子項(xiàng)必須具有Key
作為其ID類型,因?yàn)镃loud Datastore在子項(xiàng)的鍵內(nèi)存儲(chǔ)了祖先關(guān)系鏈接。
讀取或保存實(shí)體會(huì)自動(dòng)導(dǎo)致分別讀取或保存該實(shí)體下的所有子級(jí)。如果創(chuàng)建了一個(gè)新的子項(xiàng)并將其添加到帶有注釋的@Descendants
的屬性中,并且key屬性保留為空,則將為該子項(xiàng)分配新的密鑰。檢索到的子代的順序可能與保存的原始屬性中的順序不同。
除非將子項(xiàng)的關(guān)鍵屬性設(shè)置為null
或包含新父項(xiàng)作為祖先的值,否則子實(shí)體不能從一個(gè)父項(xiàng)的屬性移到另一父項(xiàng)的屬性。由于Cloud Datastore實(shí)體鍵可以有多個(gè)父實(shí)體,因此子實(shí)體可能出現(xiàn)在多個(gè)父實(shí)體的屬性中。由于實(shí)體密鑰在Cloud Datastore中是不可變的,因此要更改子項(xiàng)的密鑰,您必須刪除現(xiàn)有子項(xiàng),然后使用新密鑰重新保存。
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)系方式:
更多建議: