在SAP HANA中使用OData(二)
通常有两种方式通过OData来暴露SAP HANA中的数据库对象,一是直接使用Database Object,比如前一篇和本篇文章介绍的例子,这种方式针对于数据已经存在于SAP HANA中,在Repository中没有对应的设计时对象(Design-time Object);另一种方式是通过暴露repository中的设计时对象(Design-time Object),这是推荐使用的方式,因为这种方式的优点在于如果Design-time Object变化的话,OData服务会自动更新,如果是直接使用Database Object, 如果数据库对象改变,OData服务需要人工维护。但为了便于说明,在本文使用的例子都是直接暴露Database Object.
1 OData命名空间 (Namespace) 定义
在默认情况之下,通过OData服务生成的Schema的命名空间为项目的package的路径与xsodata文件名的拼接,例如前一篇文章的默认命名空间为weiyy.testodata.product,如图。

我们可以利用namespace关键字来修改命名空间,修改原product.xsodata,内容如下:
service namespace "test.namesp"{
"WEIYY"."PRODUCT" as "product";
}
修改之后提交并激活原来项目,

刷新原页面就可以看到修改之后的命名空间为“test.namesp”。
2 OData中的属性投影(Property Projection)
如果数据表中有多列但有时候只需要选择其中的某几列暴露出来,一方面可以做一个视图,然后暴露这个视图,另一方面可以直接使用OData中的属性投影语法,with用来选择属性,without用来排除属性。
比如对于product这个table,我们只暴露其中的id,name这两个列,修改product.osodata:
service namespace "test.namesp"{
"WEIYY"."PRODUCT" as "product" with("id","name");
}

例用without排除属性
service namespace "test.namesp"{
"WEIYY"."PRODUCT" as "product" without ("price","desc","desc_cn");
}

3 OData中的table关联与属性导航(Navigation Properties)
前面提到过,对于多表join的查询,可以通过把查询结果做成一个视图来进行暴露,笔者也是比较倾向于这种方式,但是SAP HANA 中的OData服务同时提供了另外一种查询的方式,这里也作一个说明,那就是OData中的table关联(Associations)与属性的导航。
我们新建一个assoc.xsodata文件:
service {
"WEIYY"."CATEGORY" as "CATEGORY" navigates("Product_Category" as "products");
"WEIYY"."PRODUCT" as "PRODUCT" ;
association "Product_Category" principal "CATEGORY"("id") multiplicity "1"
dependent "PRODUCT"("category_id") multiplicity "*";
}
说明:这里CATEGORY表记录PRODUCT的类别信息, association后面跟关联名称,principal一端指明关联的键,multiplicity指明关联的维度,dependent指关联的另一端。Navigates指明导航的信息。 然后提交激活并访问对应的URI,

然后我们访问CATEGORY实体,

在products这个属性中,列出了相关联的products的URL。

通过这个URL获取到category_id=1对应的product。
本篇文章只选择一部分的OData服务定义的语法介绍,有关SAP HANA OData中更多的服务定义语法请参考SAP HANA Develop Guide.
参考资料:
SAP Help Portal
URI Conventions (OData Version 2.0) · OData - the Best Way to REST
[本文的测试案例所使用的SAP HANA版本为SAP HANA SPS7 Revision 70.00]
相关文章:
在SAP HANA中使用OData(二)
通常有两种方式通过OData来暴露SAP HANA中的数据库对象,一是直接使用Database Object,比如前一篇和本篇文章介绍的例子,这种方式针对于数据已经存在于SAP HANA中,在Repository中没有对应的设计时对象(Design-time Object)…...
【Docker】前端基于dockerfiel构建镜像部署,实现在容器启动时传递环境变量, 请求不同服务地址
前端部署采用 docker 的方式, 实现在容器启动时传递环境变量, 请求不同服务地址 实现思路: 定义.env.xxx 文件(环境变量赋值),在compose.yml中引入.env.xxx 文件,环境变量通过nginx的sub_filte…...
评估测试接口软件与网站的使用方法及优劣势比较
评估测试接口软件与网站的使用方法及优劣势比较 导言 在软件开发和测试过程中,对接口进行测试是至关重要的一步。测试接口的软件和网站提供了各种工具和方法,以便开发人员和测试人员能够有效地测试他们的应用程序接口。本文将探讨几种常见的测试接口软…...
【Qt学习】QLineEdit 控件 属性与实例(登录界面,验证密码,正则表达式)
文章目录 1. 介绍2. 实例使用2.1 登录界面2.2 对比两次密码是否相同2.3 通过按钮显示当前输入的密码(并对2.2进行优化)2.4 结语 3. 正则表达式3.1 QRegExp3.2 验证输入内容 4. 资源代码 1. 介绍 关于 QLineEdit 的详细介绍,可以去查阅官方文…...
Spring Boot 和 Spring Cloud: 区别与联系
Spring Boot 和 Spring Cloud: 区别与联系 在当今软件开发领域,微服务架构和快速开发成为了主流趋势。Spring框架作为Java生态系统中最流行的开发框架之一,也不例外地推出了Spring Boot和Spring Cloud这两个项目来满足这些需求。本文将详细探讨它们之间…...
9.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-接管游戏连接服务器的操作
内容参考于:易道云信息技术研究院VIP课 上一个内容:游戏底层功能对接类GameProc的实现 码云地址(master 分支):https://gitee.com/dye_your_fingers/titan 码云版本号:44c54d30370d3621c1e9ec3d7fa1e2a0…...
vue - - - - - vue3使用draggable拖拽组件
vue3使用draggable拖拽组件 一、组件安装二、插件使用三、遇到的问题1. missing required prop: “itemKey” 一、组件安装 yarn add vuedraggablenext // or npm i -S vuedraggablenext二、插件使用 <template><draggableitem-key"id"class&q…...
PHP语言常见面试题:请解释一下PHP是什么,以及它的主要用途是什么?
PHP,英文全称为Hypertext Preprocessor,中文名称为“超文本预处理器”。它是一种通用的开源脚本语言,特别适用于Web开发领域。PHP最初是由Rasmus Lerdorf在1995年创建的,并且自那时以来,它已经发展成为一个功能强大且易…...
Unity(第六部)向量的理解和算法
标量:只有大小的量。185 888 999 (类似坐标) 向量:既有大小,也有方向。(类似以个体为主体的方向,前方一百米) 向量的模:向量的大小。(类似以个体为主体的方向,前方一百米、只取一百米…...
TypeScript+React Web应用开发实战
💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】 在现代Web开发中,React和TypeScrip…...
android开发电子书,android基础编程
内存泄漏是什么? 内存泄漏即 ML (Memory Leak) 指 程序在申请内存后,当该内存不需再使用 但 却无法被释放 & 归还给 程序的现象 内存泄漏有哪些情况,对应的解决方案? 内存泄漏的原因归根到底就是当需…...
2024-02-25 Unity 编辑器开发之编辑器拓展6 —— Event
文章目录 1 Event 介绍2 重要 API3 代码示例 1 Event 介绍 Event 提供许多属性和方法,允许检查和处理用户输入,主要用于 Unity 编辑器拓展开发。 Input 相关内容需要在运行时才能监听输入,而 Event 专门提供给编辑模式下使用…...
DC-DC降压芯片用于直流充电桩,具备3A的输出电流能力,输入电压6~40VDC——D2576
随着新能源汽车的不断普及,如何解决新能源车充电的问题也成为大热话题,充电桩的数量与质量也是目前急需提升的热门方面,现阶段人们需要的充电桩主要有交流充电桩和直流充电桩,直流充电桩因其节能效率高、功率因数高、充电快、逐渐…...
4-如何进行细分市场的分析-02 细分行业的构成和基本情况
如何快速摸清行业的构成,通常会看同行或自己做过的相似的行业,会根据不同的行业来采用不同的研究方法。对于成熟的行业和不同的行业都会有一些比较通用的研究方式。 假设我们是在分析某一个行业,在分析行业的时候它的本质还是市场分析&#…...
L1-023 输出GPLT(PTA)
文章目录 输出GPLT题目描述代码 输出GPLT 题目描述 给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按GPLTGPLT…这样的顺序输出,并忽略其它字符。当然,四种字符(不区分大小写)的个数不…...
【JavaEE进阶】 Spring AOP快速上手
文章目录 🍃什么是AOP🌳什么是Spring AOP🌴上手Spring AOP🚩引入依赖🚩编写AOP程序 ⭕总结 🍃什么是AOP AOP是Aspect Oriented Programming的简称(又称为面向切⾯编程) 什么是面向…...
android应用开发基础知识,安卓面试2020
第一章:设计思想与代码质量优化 1、设计思想六大原则 2、三大设计模式 3、数据结构 4、算法 第二章:程序性能优化 1、启动速度和执行效率优化 2、布局检测与优化 3、内存优化 4、耗电优化 5、网络传输与数据存储优化 6、APK大小优化 7、屏幕适配 8、…...
unity-unity2d基础操作笔记(一)0.5.0
unity2d基础操作笔记 一、如何查看当前系统的输入设置二、如何获取水平或者垂直的输入的代码三、如何获取当前人物的x和y的值三、如何简单写出控制人物水平移动的代码四、如何设定游戏的帧率五、如何控制渲染顺序六、如何调整摄像机摄像范围大小七、如何对Hierachy中的图进行分…...
东芝工控机维修东芝电脑PC机维修FA3100A
TOSHIBA东芝工控机维修电脑控制器PC机FA3100A MODEL8000 UF8A11M 日本东芝TOSHIBA IA controller维修SYU7209A 001 FXMC12/FXMC11;BV86R-T2GKR-DR7YF-8CPPY-4T3QD; CPU处理单元是可编程逻辑控制器的控制部分。它按照可编程逻辑控制器系统程序赋予的功能接收并存储从编程器键入…...
AI新秀Mistral:“Open AI“ 新时代
最近互联网出现不少类似“下一代openai”、“GPT-4最强竞品”、“法国AI独角兽”、“欧洲的OpenAI”、“微软新宠儿”.... 的文章,都会附带一张图片,就是下面这张: 那么到底发生了什么,出来个什么东西呢?就是本文的主…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...
Ubuntu系统多网卡多相机IP设置方法
目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机,交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息,系统版本:Ubuntu22.04.5 LTS;内核版本…...
Qwen系列之Qwen3解读:最强开源模型的细节拆解
文章目录 1.1分钟快览2.模型架构2.1.Dense模型2.2.MoE模型 3.预训练阶段3.1.数据3.2.训练3.3.评估 4.后训练阶段S1: 长链思维冷启动S2: 推理强化学习S3: 思考模式融合S4: 通用强化学习 5.全家桶中的小模型训练评估评估数据集评估细节评估效果弱智评估和民间Arena 分析展望 如果…...
