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博客

相关推荐
圣光SG4 小时前
Servlet学习笔记
笔记·学习·servlet
奋发向前wcx4 小时前
y1,y2总复习笔记5 2026.7.19
数据结构·笔记·算法
@Mike@6 小时前
02-数据库学习笔记(SQL引擎)
数据库·笔记·学习
六点_dn7 小时前
RabbitMQ学习笔记-定义与作用
笔记·学习·rabbitmq
我的xiaodoujiao7 小时前
快速学习Python基础知识详细图文教程9--函数进阶
开发语言·python·学习·测试工具
世人万千丶9 小时前
鸿蒙Flutter Flexible与Expanded的区别
学习·flutter·harmonyos·鸿蒙
香辣牛肉饭9 小时前
【算法】动态规划 最长公共子序列(LCS)
经验分享·笔记·算法·动态规划
迷途呀9 小时前
Python:函数中的参数类型
开发语言·笔记·python·langchain·nlp
YM52e9 小时前
鸿蒙Flutter Center居中组件:Align对齐详解
android·学习·flutter·华为·harmonyos·鸿蒙
依然范特东10 小时前
动手学深度学习笔记--卷积层、微调
人工智能·笔记·深度学习