云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

云数据库_百度云分享你懂的_怎么买

小七 141 0

云解析_老炮儿百度云_返利

本教程介绍

如何实现深嵌件在里面SAP云应用编程模型(第2部分:使用UUID)

快速链接:示例项目文件第一部分:简介第3部分:多层次第4部分:使用远程服务第五部分:SDK远程服务

这个博客是为了报道一个我想对大多数CAP用户来说都是相关的案例:在CDS模型中,关键字段经常使用的数据类型是UUID:

好处是框架可以生成值。它影响CREATE操作,用户不发送key属性的值因此,它也会影响DEEP INSERT

让我们来详细查看它

请注意,这个博客建立在我们创建项目的前一个博客上,学习如何实现DEEP INSERT

新需求

在前一个博客中,我们为没有生成键值的模型实现DEEP INSERT让我们看看我们的请求负载:

{"公司ID":3,"companyName":"啤酒店","linkToContact\u contactId":"contactForberShop","链接联系人":{"contactId":"contactForberShop","contactName":"彼得","联系电话":9876543}

我们可以看到我们已经通过了每一处房产但实际上,我们不希望传递ID值,物联网的前景,大数据要学什么,而是希望它自动生成所以我们将从有效载荷中删除关键字段:

{"companyName":"啤酒店","linkToContact\u contactId":"contactForberShop","链接联系人":{"contactName":"彼得","联系电话":9876543}

但是在上面的负载中,有一个问题:我们不知道外键值,因为它应该被生成:"linkToContact\u contactId":"哪个contactId?",不,必须由服务器填写所以我们从有效载荷中去掉这个字段:

{"companyName":"啤酒店","链接联系人":{"contactName":"彼得","联系电话":9876543}

应该是这样的:用户不关心ID。生成和分配由服务

完成,但如何实现?好吧,记住:服务-这就是我们

我们需要一些代码。CDS模型的一点变化

处理UUID

您可以创建一个新项目,或者只对现有项目应用两点变化:将分配给键属性的数据类型更改为UUID,对于这两个实体:

除了这两个小更改之外,上一个blog的所有其他项目都保持不变。当然,我们需要在java代码中添加几行代码

注意:在重新部署mtar后,由于表METADATA

的更改,您的现有数据将消失,上述要求需要我们付出额外的努力。将数据类型更改为UUID是不够的。

UUID的键值通常由FWK生成,但不适用于深插入中的嵌套实体

第二个re要求:价值外键元素。如果FWK没有生成UUID,那么显然它不能被自动分配到外键字段

这两个任务都必须在我们的自定义代码中处理

正如所指出的,云服务器厂商,除了上面的实现之外,我们还需要手动实现2个小任务:

1。生成内联实体的键值

如我们所知,物联网应用,如果我们将UUID指定为CDS中键字段的数据类型,那么该值将由FWK生成对于OData服务的用户来说,这具有以下优势:使用POST请求创建条目时,他不需要发送请求正文中的key属性

但是:这只适用于普通的CREATE请求。如果是deep insert,则只会动态生成父实体(CompanyEntity)的键值。但不适用于关联实体(ContactEntity)。因为FWK不知道哪个是关键属性。因为它是在我们的实现代码到达之前完成的

解决方案:我们必须手动为deep insert中的关联实体生成UUID

在这个片段中,我们可以看到:我们生成一个UUID(在OData中,类型是Edm.Guid文件)手动要将UUID设置为嵌套ContactEntity的键值,我们必须获取相应的映射我们有一个映射,它表示POST请求的有效负载。它包含父实体和嵌套的子实体地图包含一个作为导航属性的键("linkToContact")值是一个映射,它是嵌套实体(ContactEntity)的数据。这就是将创建的内联,深插入。在这个嵌套映射中,我们必须为键字段(contactId)设置值(UUID)如果最终用户已经传递了一个值,商业大数据分析,它将被重写,这是所需的行为。

顺便说一句,上面的代码必须被一个小检查包围,这样它只能在深插入时运行。

2。外键值

我们已经生成了一个GUID并将其设置为嵌套实体的键值。这是协会的目标。因此,此时,数据库上的CREATE操作将在2个表中创建2个新行但是新的公司条目需要知道联系人的ID,否则导航将无法工作。因此,现在我们必须为父实体的外键字段设置相同的值

记住:在我们的CDS模型中,我们有一个从公司实体到联系人实体的管理关联"托管"是指CDS向公司实体生成一个属性,该属性携带关联联系人实体的外键也就是说,公司知道联系人列表中哪个联系人属于公司生成的属性在edmx中可见。因此,在为联系人生成guid时,我们必须将此guid设置为CompanyEntity的外键属性的值这是在下面的行中完成的:

我们有一个地图,其中包含将在数据库中创建的所有数据。在这个映射中,我们设置了外键属性的值("linkToContact\u contactId")

外键属性的名称是由CDS生成的,因此必须在(生成的)edmx或CSN文件(在src/main/resources/edmx文件夹中)中搜索它

请参阅附录中的完整代码

测试它

部署后,尝试用这个负载进行深度插入:

它应该工作没有错误,两个实体都应该创建,导航(或$expand)应该工作良好

摘要