W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
通過@Descendants
注釋支持父子關(guān)系。
與嵌入式子代不同,后代是駐留在自己種類中的完整實體。父實體沒有額外的字段來保存后代實體。相反,該關(guān)系是在后代的鍵中捕獲的,該鍵引用了它們的父實體:
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鍵文字表示形式的實例還將包含父ShoppingOrder
ID值:
Key(orders, '12345', purchased_item, 'eggs')
父級ShoppingOrder
的GQL鍵文字表示為:
Key(orders, '12345')
Cloud Datastore實體以各自的種類單獨存在。
ShoppingOrder
:
{ "id" : 12345 }
該訂單中的兩個項目:
{ "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)系將對象的父子關(guān)系結(jié)構(gòu)存儲在Cloud Datastore中。 因為這些關(guān)系是由Ancestor機制定義的,所以在父實體或子實體中都不需要額外的列來存儲此關(guān)系。關(guān)系鏈接是后代實體鍵值的一部分。這些關(guān)系可能很深層次。
擁有子實體的Properties必須類似于集合,但是它們可以是常規(guī)屬性(如List
,數(shù)組,Set
等)支持的任何受支持的可相互轉(zhuǎn)換的集合類類型。子項必須具有Key
作為其ID類型,因為Cloud Datastore在子項的鍵內(nèi)存儲了祖先關(guān)系鏈接。
讀取或保存實體會自動導(dǎo)致分別讀取或保存該實體下的所有子級。如果創(chuàng)建了一個新的子項并將其添加到帶有注釋的@Descendants
的屬性中,并且key屬性保留為空,則將為該子項分配新的密鑰。檢索到的子代的順序可能與保存的原始屬性中的順序不同。
除非將子項的關(guān)鍵屬性設(shè)置為null
或包含新父項作為祖先的值,否則子實體不能從一個父項的屬性移到另一父項的屬性。由于Cloud Datastore實體鍵可以有多個父實體,因此子實體可能出現(xiàn)在多個父實體的屬性中。由于實體密鑰在Cloud Datastore中是不可變的,因此要更改子項的密鑰,您必須刪除現(xiàn)有子項,然后使用新密鑰重新保存。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: