美文网首页
第十章 将对象映射到 XML - 控制关系映射的形式

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

作者: Cache技术分享 | 来源:发表于2023-11-19 08:26 被阅读0次

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

控制关系映射的形式

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

  • 对于父子关系:

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

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

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

  • 对于一对多关系:

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

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

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

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

关系的默认映射

image.png

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>

相关文章

  • ORM

    ORM框架ORM全称对象关系映射(Object/Relation Mapping),指将Java对象状态自动映射到...

  • 4.hibernate映射(多对一)

    映射关系 映射是对象到表,映射关系是多个对象的关系映射到多张表的关系! cascade级联 hibernate的级...

  • XmlRootElement JAXB注解

    [XmlRootElement JAXB注解] XmlRootElement: 将类或枚举类型映射到 XML 元素...

  • 有关Hibernate知识的学习(一)

    1、Hibernate使用xml文件将java类映射到数据库中

  • NSURLCache

    概述 NSURLCache类通过将NSURLRequest对象映射到NSCached URLResponse对象来...

  • Dapper-小型ORM之王(C#.NET)

    ORM:对象关系映射器,它直接将数据库映射到C#对象。 有很多ORM框架可用,Dapper是其中之一,被称为ORM...

  • NSURLCache官方文档阅读

    NSURLCache Overview NSURLCache类通过将NSURLRequest对象映射到NSCach...

  • URL映射

    XML文件配置 内部名映射到全限定类名 内部名映射到公共url名

  • Hibernate继承映射之每个继承层次一张表

    1.概述关系数据库的表之间不存在继承关系,为了将面向对象中的继承关系映射到关系数据库中,可使用三种映射策略: 1、...

  • GreenDao框架简析

    GreenDao是一款开源的面向Android的轻便、快捷的ORM(对象映射)框架,将Java对象映射到SQLit...

网友评论

      本文标题:第十章 将对象映射到 XML - 控制关系映射的形式

      本文链接:https://www.haomeiwen.com/subject/qcopwdtx.html