codecamp

Spring Cloud Datastore 祖辈关系

通过@Descendants注释支持父子关系。

与嵌入式子代不同,后代是驻留在自己种类中的完整实体。父实体没有额外的字段来保存后代实体。相反,该关系是在后代的键中捕获的,该键引用了它们的父实体:

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的祖先关系将对象的父子关系结构存储在Cloud Datastore中 因为这些关系是由Ancestor机制定义的,所以在父实体或子实体中都不需要额外的列来存储此关系。关系链接是后代实体键值的一部分。这些关系可能很深层次。

拥有子实体的Properties必须类似于集合,但是它们可以是常规属性(如List,数组,Set等)支持的任何受支持的可相互转换的集合类类型。子项必须具有Key作为其ID类型,因为Cloud Datastore在子项的键内存储了祖先关系链接。

读取或保存实体会自动导致分别读取或保存该实体下的所有子级。如果创建了一个新的子项并将其添加到带有注释的@Descendants的属性中,并且key属性保留为空,则将为该子项分配新的密钥。检索到的子代的顺序可能与保存的原始属性中的顺序不同。

除非将子项的关键属性设置为null或包含新父项作为祖先的值,否则子实体不能从一个父项的属性移到另一父项的属性。由于Cloud Datastore实体键可以有多个父实体,因此子实体可能出现在多个父实体的属性中。由于实体密钥在Cloud Datastore中是不可变的,因此要更改子项的密钥,您必须删除现有子项,然后使用新密钥重新保存。

Spring Cloud Datastore 嵌入式实体
Spring Cloud Datastore 关键参考关系
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

三、Spring Cloud Netflix

SpringCloud Hystrix超时和Ribbon客户

SpringCloud 重试失败的请求

五、Spring Cloud Stream

六、SpringCloud Binder实现

SpringCloud 重试RabbitMQ Binder

SpringCloud Dead-Letter队列处理

八、Spring Cloud Sleuth

SpringCloud 当前Span

十二、Spring Cloud for Cloud Foundry

十三、Spring Cloud Contract

Spring Cloud Contract验证程序设置

SrpingCloud Gradle项目

十五、Spring Cloud网关

Spring Cloud 配置路由谓词工厂和网关过滤工厂

Spring Cloud TLS / SSL

Spring Cloud网关配置

SpringCloud 故障排除

十八、Spring Cloud GCP

Spring Cloud GCP Spring资源

Spring Cloud Spring JDBC

Spring Cloud Redis的Cloud Memorystore

Spring Cloud 云身份识别代理(IAP)身份验证

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }