赞
踩
XML
- 控制关系映射的形式关系以与其他属性相同的方式映射到 XML
,具体取决于其中使用的集合的性质:
对于父子关系:
父对象中的关系属性是一个集合属性,特别是对象列表。请参阅控制集合属性的映射。
子对象中的关系属性是对象值属性。
默认情况下,此关系不会映射为 XML
。
对于一对多关系:
默认情况下,此关系不会映射为 XML
。
在任何给定时间,只能映射关系的一侧,否则就会出现无限循环。要反转完成映射的方式,请使用 XMLPROJECTION
属性参数。
这个原理最好通过例子来解释。
Parent
类是 Child
类的父类。
除了关系属性(Children
)之外,Parent
类还有两个属性(ParentPropA
和 ParentPropB
)。
同样,除了关系属性 (MyParent
) 之外,Child
类还有两个属性(ChildPropA
和 ChildPropB
)。
当将这些类映射到 XML
时,默认情况下会得到以下结果:
Parent
的 XML
投影包括三个属性的投影:ParentPropA
、ParentPropB
和 Children
。 Children
属性的处理方式与任何其他集合一样。也就是说,默认情况下它被投影为一组嵌套元素。<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>
Child
的 XML
投影包括两个属性的投影:ChildPropA
和 ChildPropB
。属性 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
时,会得到以下结果:
Parent
的 XML
投影忽略 Children
属性:<Parent>
<ParentPropA>12345</ParentPropA>
<ParentPropB>67890</ParentPropB>
</Parent>
Child
的 XML
映射包括其所有属性的投影:
<Child>
<ChildPropA>abc</ChildPropA>
<ChildPropB>def</ChildPropB>
<MyParent>
<ParentPropA>12345</ParentPropA>
<ParentPropB>67890</ParentPropB>
</MyParent>
</Child>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。