第十章 将对象映射到 XML - 控制关系映射的形式

news/2025/2/5 14:40:27/

文章目录

  • 第十章 将对象映射到 `XML` - 控制关系映射的形式
  • 控制关系映射的形式
  • 关系的默认映射
  • 相反,映射关系的另一面

第十章 将对象映射到 XML - 控制关系映射的形式

控制关系映射的形式

关系以与其他属性相同的方式映射到 XML,具体取决于其中使用的集合的性质:

  • 对于父子关系:

    • 父对象中的关系属性是一个集合属性,特别是对象列表。请参阅控制集合属性的映射。

    • 子对象中的关系属性是对象值属性。

      默认情况下,此关系不会映射为 XML

  • 对于一对多关系:

    • 单个对象中的关系属性是一个集合属性,特别是对象列表。
    • 另一个对象中的关系属性是对象值属性。

    默认情况下,此关系不会映射为 XML

在任何给定时间,只能映射关系的一侧,否则就会出现无限循环。要反转完成映射的方式,请使用 XMLPROJECTION 属性参数。

这个原理最好通过例子来解释。

关系的默认映射

在这里插入图片描述

Parent 类是 Child 类的父类。

除了关系属性(Children)之外,Parent 类还有两个属性(ParentPropAParentPropB)。

同样,除了关系属性 (MyParent) 之外,Child 类还有两个属性(ChildPropAChildPropB)。

当将这些类映射到 XML 时,默认情况下会得到以下结果:

  • ParentXML 投影包括三个属性的投影:ParentPropAParentPropBChildrenChildren 属性的处理方式与任何其他集合一样。也就是说,默认情况下它被投影为一组嵌套元素。
<Parent><ParentPropA>12345</ParentPropA><ParentPropB>67890</ParentPropB><Children><Child><ChildPropA>abc</ChildPropA><ChildPropB>def</ChildPropB></Child><Child><ChildPropA>ghi</ChildPropA><ChildPropB>jkl</ChildPropB></Child></Children>
</Parent>
  • ChildXML 投影包括两个属性的投影:ChildPropAChildPropB。属性 MyParent 被忽略。
<Child><ChildPropA>abc</ChildPropA><ChildPropB>def</ChildPropB>
</Child>

对于一对多关系也是如此。具体来说,一侧的对象包括关系属性的映射。多方的对象不包括关系属性的映射。

相反,映射关系的另一面

通过在两个类的关系属性中指定 XMLPROJECTION 参数,可以映射关系的另一端。以下示例是默认示例的变体。

Class Relationships2.Parent Extends (%Persistent, %XML.Adaptor)
{Property ParentPropA As %String;Property ParentPropB As %String;Relationship Children As Child(XMLPROJECTION = "NONE") [ Cardinality = children, Inverse = MyParent ];}

同样,Child类如下:

Class Relationships2.Child Extends (%Persistent, %XML.Adaptor)
{Property ChildPropA As %String;Property ChildPropB As %String;Relationship MyParent As Parent (XMLPROJECTION="element") [ Cardinality = parent, Inverse = Children ];}

当将这些类映射到 XML 时,会得到以下结果:

  • ParentXML 投影忽略 Children 属性:
<Parent><ParentPropA>12345</ParentPropA><ParentPropB>67890</ParentPropB>
</Parent>

ChildXML 映射包括其所有属性的投影:

<Child><ChildPropA>abc</ChildPropA><ChildPropB>def</ChildPropB><MyParent><ParentPropA>12345</ParentPropA><ParentPropB>67890</ParentPropB></MyParent>
</Child>

http://www.ppmy.cn/news/1230180.html

相关文章

【Python】 Python 操作PDF文档

Python 操作PDF文档 1、PDF &#xff08;便携式文件格式&#xff0c;Portable Document Format&#xff09;是由Adobe Systems在1993年用于文件交换所发展出的文件格式。 PDF主要由三项技术组成&#xff1a;衍生自PostScript&#xff1b;字型嵌入系统&#xff1b;资料压缩及传…

【论文阅读】SPARK:针对视觉跟踪的空间感知在线增量攻击

SPARK: Spatial-Aware Online Incremental Attack Against Visual Tracking introduction 在本文中&#xff0c;我们确定了视觉跟踪对抗性攻击的一个新任务&#xff1a;在线生成难以察觉的扰动&#xff0c;误导跟踪器沿着不正确的&#xff08;无目标攻击&#xff0c;UA&#x…

【PyQt小知识 - 3】: QComboBox下拉框内容的设置和更新、默认值的设置、值和下标的获取

QComboBox 内容的设置和更新 from PyQt5.QtWidgets import * import sysapp QApplication(sys.argv)mainwindow QMainWindow() mainwindow.resize(200, 200) # 设置下拉框 comboBox QComboBox(mainwindow) comboBox.addItems([上, 中, 下])button QPushButton(更新, main…

python的socket模块以及通信相关学习笔记

Socket又称"套接字"&#xff0c;应用程序通常通过"套接字"向网络发出请求或者应答网络请求&#xff0c;使主机间或者一台计算机上的进程间可以通讯(最初设计是为了是使同一台计算机中的不同进程进行信息传递通信)&#xff0c;最后拓展到可以使网络上两台计…

pytho你-opencv划痕检测

pytho你-opencv划痕检测 这次实验&#xff0c;我们将对如下图片进行划痕检测&#xff0c;其实这个比较有难度&#xff0c;因为清晰度太差了。 我们做法如下&#xff1a; &#xff08;1&#xff09;读取图像为灰度图像&#xff0c;进行自适应直方图均衡化处理&#xff0c;增强…

html综合笔记:设计实验室主页

&#xff11; 主页来源及效果 Overview - Lab Website Template docs (gitbook.io) greenelab/lab-website-template: An easy-to-use, flexible website template for labs (github.com) 2 创建网页 3 主要的一些file 3.1 index.md 主页面 3.1.1 intro 3.1.2 highlight …

线上bug-接口速度慢

&#x1f47d;System.out.println(“&#x1f44b;&#x1f3fc;嗨&#xff0c;大家好&#xff0c;我是代码不会敲的小符&#xff0c;双非大四&#xff0c;Java实习中…”); &#x1f4da;System.out.println(“&#x1f388;如果文章中有错误的地方&#xff0c;恳请大家指正&a…

HDCTF2023 - Reverse方向全WP

文章目录 [HDCTF 2023]easy_re[HDCTF 2023]easy_asm[HDCTF 2023]fake_game[HDCTF 2023]enc[HDCTF 2023]double_code[HDCTF 2023]买了些什么呢[HDCTF2023]basketball [HDCTF 2023]easy_re UPX壳&#xff0c;脱壳 一个base64编码。 [HDCTF 2023]easy_asm ida打开后可以看到xor 10…