SAP学习笔记 - BTP CAP开发02 - Assosication,Composition,?$expand=books

上一章讲了SAP学习笔记 - BTP CAP开发01 - 新建BAS Project,npm install, cds init,cds watch,cds add data --records 5

https://blog.csdn.net/shi_ly/article/details/159884366

本章继续学习CAP开发的知识。

目录,

1,Projects

[1-1,Assosication 表关联 1:1](#1-1,Assosication 表关联 1:1)

[1-2,Association 表关联:1:N](#1-2,Association 表关联:1:N)

[1-3,加 Author Service](#1-3,加 Author Service)

1-4,Composition

[1-5,加 Chapters Service](#1-5,加 Chapters Service)


下面是详细内容。

1,Projects

1-1,Assosication 表关联 1:1

复制代码
entity Books : cuid, managed {
    Title  : String;
    Author : Association to Author;
}

entity Author : cuid, managed {
    Name : String;
}

因为咱们这里用的UUID作为Key,所以它们是通过这个Key进行关联的

1-2,Association 表关联:1:N

复制代码
entity Books : cuid, managed {
    title  : String;
    author : Association to Author;
}

entity Author : cuid, managed {
    name : String;
    books : Association to many Books on books.author = $self;
}

也可以同样,删掉 data,然后用命令 cds data --records 5 来重建

这里也加一个常用快捷键

Shift+Alt+F ==》格式化代码

Shift+Alt+向下箭头 ==》拷贝上一行代码

1-3,加 Author Service

复制代码
using {Bookstore.db as db} from '../db/schema';

service BookstoreService {

    entity Books   as projection on db.Books;
    entity Authors as projection on db.Author;


}

然后可以用cds watch,打开 http://localhost:4004

都可以看到数据了

如果想看两个表关联,可以在URL加 ?$expand=books

[https://port4004-workspaces-ws-fwdqw.us10.trial.applicationstudio.cloud.sap/odata/v4/bookstore/Authors?$expand=books](https://port4004-workspaces-ws-fwdqw.us10.trial.applicationstudio.cloud.sap/odata/v4/bookstore/Authors?$expand=books "https://port4004-workspaces-ws-fwdqw.us10.trial.applicationstudio.cloud.sap/odata/v4/bookstore/Authors?$expand=books")

就可以看到关联了哈

1-4,Composition

其实就是父子。

跟关联(Association)不同,没有父,就不会有子。

比如一本书(Books)里面有很多章节(Chapters),但是没有书,就不会有章节这个东西。

复制代码
entity Books : cuid, managed {
    title    : String;
    author   : Association to Author;
    Chapters : Composition of many Chapters
                   on Chapters.book = $self;
}

entity Author : cuid, managed {
    name  : String;
    books : Association to many Books
                on books.author = $self;
}

entity Chapters : cuid, managed {
        number : Integer;
    key book   : Association to Books;
}

建这个东西的用途就是,删父的时候,子也一起删掉了,跟DB里面那个级联删除似的。

同样,用 cds data --records 5重建数据

但是注意1点,父表里面是不存在Composition字段的,

比如Books表里,没有Chapters字段,但是Chapter表里, 有Books字段

其实,不仅是Composition,

Association也一样,1对多的情况,1的那一方并不能存在多的那一方的字段

比如Author可以写很多书,Author表里就没有Books字段

但是Books表里必须有Author字段

1-5,加 Chapters Service

复制代码
using {Bookstore.db as db} from '../db/schema';

service BookstoreService {

    entity Books   as projection on db.Books;
    entity Authors as projection on db.Authors;
    entity Chapters as projection on db.Chapters;

}

同样的,加 ?$expand=Chapters,你也可以打开一本里有多少章:

[https://port4004-workspaces-ws-fwdqw.us10.trial.applicationstudio.cloud.sap/odata/v4/bookstore/Books?$expand=Chapters](https://port4004-workspaces-ws-fwdqw.us10.trial.applicationstudio.cloud.sap/odata/v4/bookstore/Books?$expand=Chapters "https://port4004-workspaces-ws-fwdqw.us10.trial.applicationstudio.cloud.sap/odata/v4/bookstore/Books?$expand=Chapters")

以上就是本篇的全部内容。

如果大家觉得还行,希望大家多点赞,收藏,转发,感谢!

更多SAP顾问业务知识请点击下面目录链接或东京老树根的博客主页

https://blog.csdn.net/shi_ly/category_12216766.html

东京老树根-CSDN博客

相关推荐
油丶酸萝卜别吃5 小时前
前端转全栈学习路线
前端·学习
GlueNa2SiO39 小时前
第十八章 Linux故障排查与恢复
linux·服务器·笔记·学习
weixin_431600449 小时前
NestJS 入门(3):Guard 如何挡住未登录请求?
前端·后端·学习·nest.js
带娃的IT创业者9 小时前
DeepTutor:当 Agent-Native 架构撞上个性化学习的临界点
学习·架构·ai agent·大模型应用·个性化学习·教育技术·agent-native架构
xian_wwq10 小时前
【学习笔记】Context Engineering,AI Agent 真正的内存管理-4/16
笔记·学习·context
寒月小酒10 小时前
AnythingLLM 学习
学习
疯狂打码的少年11 小时前
【数据结构】队列:定义、顺序队列与链式队列
数据结构·笔记
LeoZY_14 小时前
LinkScope 使用笔记:基于 OpenOCD 的通用硬件芯片调试助手
笔记·单片机·嵌入式硬件·开源软件
不会代码的小猴14 小时前
标准模板库(STL)
开发语言·c++·笔记·算法
爱莉希雅&&&14 小时前
K8s NFS+StorageClass+PV/PVC+Deployment 实战笔记
笔记·容器·kubernetes