当前位置: 首页 > news >正文

在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]

相关文章:

  • 矩阵的范数 matrix norm Frobenius norm 弗罗贝尼乌斯 范数
  • vscode与vue/react环境配置
  • Langchain 加载网络信息实现RAG以及UnstructuredURLLoader的使用
  • MCU最小系统电路设计(以STM32F103C8T6为例)
  • Unity接入SQLite (三):C#封装SQL命令
  • 蓝桥杯倒计时47天!DFS基础——图的遍历
  • 如何将域名解析成IP地址?
  • EfficientSAM | 借助MIM机制,MetaAI让SAM更高效!
  • 编程笔记 html5cssjs 092 JavaScript 表单控件
  • 防火墙的内容安全
  • 顶顶通呼叫中心中间件-如何使处于机器人话术中的通话手动转接到坐席分机上讲解(mod_cti基于FreeSWITCH)
  • Qt篇——QTableWidget保存表格数据到Excel文件中,读Excel内容到QTableWidget
  • 人工智能之Tensorflow程序结构
  • 信息安全计划
  • hive中如何取交集并集和差集
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 3.7、@ResponseBody 和 @RestController
  • Android Volley源码解析
  • Angular 响应式表单之下拉框
  • C++类中的特殊成员函数
  • Docker 笔记(2):Dockerfile
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • Less 日常用法
  • Otto开发初探——微服务依赖管理新利器
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • Sequelize 中文文档 v4 - Getting started - 入门
  • SQLServer插入数据
  • 从重复到重用
  • 前端相关框架总和
  • 前端性能优化--懒加载和预加载
  • 前嗅ForeSpider教程:创建模板
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 如何使用 JavaScript 解析 URL
  • 微服务框架lagom
  • ​iOS安全加固方法及实现
  • ​ssh免密码登录设置及问题总结
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • ​如何在iOS手机上查看应用日志
  • # 安徽锐锋科技IDMS系统简介
  • #DBA杂记1
  • (1)bark-ml
  • (2)(2.10) LTM telemetry
  • (第一天)包装对象、作用域、创建对象
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (四)模仿学习-完成后台管理页面查询
  • (学习日记)2024.01.19
  • (转)EXC_BREAKPOINT僵尸错误
  • ***监测系统的构建(chkrootkit )
  • .net mvc部分视图
  • .net 调用php,php 调用.net com组件 --