Skip Headers

Oracle TopLink Developer's Guide 10g Release 3 (10.1.3) B13593-01 |
| Home | Solution Area | Contents | Index

Previous | Next |

# XML Composite Collection Mapping

Use XML composite collection mappings to represent one-to-many relationships. Composite collection XML mappings can reference any class that has a TopLink descriptor. The attribute in the object mapped must implement either the Java `Collection` interface (for example, `Vector` or `HashSet`) or `Map` interface (for example, `Hashtable` or `TreeMap`). The `CompositeCollectionMapping` class allows a reference to the mapped class and the indexing type for that class.

Given the XML schema in Example 65-48, Figure 65-27 illustrates an XML composite collection mapping to different elements by position in a corresponding XML document. Example 65-49 shows how to configure this mapping in Java for a `Collection` attribute and Example 65-50 shows how to configure this mapping in Java for a `Map` attribute.

Example 65-48 Schema for XML Composite Collection Mapping

    <?xml version="1.0" encoding="UTF-8"?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <xsd:element name="customer" type="customer-type"/>
        <xsd:complexType name="customer-type">
            <xsd:sequence>
                <xsd:element name="first-name" type="xsd:string"/>
                <xsd:element name="last-name" type="xsd:string"/>
                <xsd:element name="phone-number">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="number" type="xsd:string"/>
                        </xsd:sequence>
                        <xsd:attribute name="type" type="xsd:string"/>
                    </xsd:complexType>
                </xsd:element>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:schema>

Figure 65-27 XML Composite Collection Mapping

Description of "Figure 65-27 XML Composite Collection Mapping"

Example 65-49 Java for XML Composite Collection Mapping for a Collection Attribute

    XMLCompositeCollectionMapping phoneNumbersMapping = new XMLCompositeCollectionMapping();
    phoneNumbersMapping.setAttributeName("phoneNumbers");
    phoneNumbersMapping.setXPath("phone-number");
    phoneNumbersMapping.setReferenceClass(PhoneNumber.class);

Example 65-50 Java for XML Composite Collection Mapping for a Map Attribute

    XMLCompositeCollectionMapping phoneNumbersMapping = new XMLCompositeCollectionMapping();
    phoneNumbersMapping.setAttributeName("phoneNumbers");
    phoneNumbersMapping.setXPath("phone-number");
    phoneNumbersMapping.setReferenceClass(PhoneNumber.class);
    phoneNumbersMapping.useMapClass(HashMap.class, "getType");

See Chapter 70, "Configuring an XML Composite Collection Mapping" for more information.