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


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

    控制关系映射的形式

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

    • 对于父子关系:

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

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

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

    • 对于一对多关系:

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

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

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

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

    关系的默认映射

    在这里插入图片描述

    Parent 类是 Child 类的父类。

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

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

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

    • ParentXML 投影包括三个属性的投影:ParentPropAParentPropBChildrenChildren 属性的处理方式与任何其他集合一样。也就是说,默认情况下它被投影为一组嵌套元素。
    <Parent>
      <ParentPropA>12345ParentPropA>
      <ParentPropB>67890ParentPropB>
      <Children>
        <Child>
          <ChildPropA>abcChildPropA>
          <ChildPropB>defChildPropB>
        Child>
        <Child>
          <ChildPropA>ghiChildPropA>
          <ChildPropB>jklChildPropB>
        Child>
      Children>
    Parent>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • ChildXML 投影包括两个属性的投影:ChildPropAChildPropB。属性 MyParent 被忽略。
    <Child>
      <ChildPropA>abcChildPropA>
      <ChildPropB>defChildPropB>
    Child>
    
    • 1
    • 2
    • 3
    • 4

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

    相反,映射关系的另一面

    通过在两个类的关系属性中指定 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 ];
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    同样,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 ];
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

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

    • ParentXML 投影忽略 Children 属性:
    <Parent>
      <ParentPropA>12345ParentPropA>
      <ParentPropB>67890ParentPropB>
    Parent>
    
    • 1
    • 2
    • 3
    • 4

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

    <Child>
      <ChildPropA>abcChildPropA>
      <ChildPropB>defChildPropB>
      <MyParent>
        <ParentPropA>12345ParentPropA>
        <ParentPropB>67890ParentPropB>
      MyParent>
    Child>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  • 相关阅读:
    Redis内存模型讲解
    如何运用 Kyligence 综合对比餐饮门店的销售能力?
    ARMv8/ARMv9架构下特权程序之间的跳转模型与系统启动探析
    函数式编程-Stream流
    浅谈精密配电多回路监控装置在轨道交通项目上的应用
    Flutter实用工具Indexer列表索引和Search搜索帮助。
    基于CSP的运动想象EEG分类任务实战
    解决类重复的问题
    GoogleTest学习笔记(二)
    Centos安装RabbitMQ
  • 原文地址:https://blog.csdn.net/yaoxin521123/article/details/134499206