Jump to: navigation, search

Difference between revisions of "EclipseLink/UserGuide/MOXy/Relationships/Shared Reference/Keys and Foreign Keys/Single Key"

m
m (Replacing page with 'See http://www.eclipse.org/eclipselink/documentation/2.4/moxy/shared_reference_relationships002.htm')
 
Line 1: Line 1:
{{EclipseLink_UserGuide
+
See http://www.eclipse.org/eclipselink/documentation/2.4/moxy/shared_reference_relationships002.htm
|info=y
+
|toc=y
+
|api=y
+
|apis= * [http://www.eclipse.org/eclipselink/api/latest/javax/xml/bind/annotation/XmlID.html XmlID]
+
* [http://www.eclipse.org/eclipselink/api/latest/javax/xml/bind/annotation/XmlIDREF.html XmlIDREF]
+
}}
+
 
+
=Mapping Single Key Relationships=
+
 
+
To model non-privately-owned relationships, your "target" objects must have IDs (keys) defined, and your "source" object must use these IDs to map the relationship.
+
 
+
Relationships represented with keys use the '''@XmlID''' and '''@XmlIDREF''' annotations.  Although the JAXB specification requires that the property marked with '''@XmlID''' be a '''String''', MOXy JAXB does not enforce this restriction.
+
 
+
In this example, each '''Employee''' has one '''manager''' but multiple '''reports'''.
+
 
+
<source lang="java">
+
package example;
+
 
+
import javax.xml.bind.annotation.*;
+
 
+
@XmlAccessorType(XmlAccessType.FIELD)
+
public class Employee {
+
    @XmlAttribute
+
    @XmlID
+
    private Integer id;
+
+
    @XmlAttribute
+
    private String name;
+
+
    @XmlIDREF
+
    private Employee manager;
+
+
    @XmlElement(name="report")
+
    @XmlIDREF
+
    private List<Employee> reports;
+
 
+
    ...
+
}
+
</source>
+
 
+
The following example shows how to define this mapping information in EclipseLink's OXM metadata format.
+
 
+
<source lang="xml">
+
...
+
<java-type name="Employee">
+
  <java-attributes>
+
      <xml-attribute java-attribute="id" type="java.lang.Integer" xml-id="true"/>
+
      <xml-attribute java-attribute="name" type="java.lang.String"/>
+
      <xml-element java-attribute="manager" type="mypackage.Employee" xml-idref="true"/>
+
      <xml-element java-attribute="reports" type="mypackage.Employee" container-type="java.util.ArrayList" xml-idref="true"/>
+
  </java-attributes>
+
</java-type>
+
...
+
</source>
+
 
+
This would produce the following XML:
+
 
+
<source lang="xml">
+
<company>
+
    <employee id="1" name="Jane Doe">
+
        <report>2</report>
+
        <report>3</report>
+
    </employee>
+
    <employee id="2" name="John Smith">
+
        <manager>1</manager>
+
    </employee>
+
    <employee id="3" name="Anne Jones">
+
        <manager>1</manager>
+
    </employee>
+
</company>
+
</source>
+
 
+
The '''manager''' and '''reports''' elements contain the IDs of the '''Employee''' instances they are referencing.
+
 
+
 
+
== Using @XmlList ==
+
 
+
Because the '''@XmlIDREF''' annotation is also compatible with the '''@XmlList''' annotation, the '''Employee''' object could be modeled as:
+
 
+
<source lang="java">
+
package example;
+
 
+
import javax.xml.bind.annotation.*;
+
 
+
@XmlAccessorType(XmlAccessType.FIELD)
+
public class Employee {
+
    @XmlID
+
    @XmlAttribute
+
    private Integer id;
+
+
    @XmlAttribute
+
    private String name;
+
+
    @XmlIDREF
+
    private Employee manager;
+
+
    @XmlIDREF
+
    @XmlList
+
    private List<Employee> reports;
+
 
+
    ...
+
}
+
</source>
+
 
+
This would produce the following XML:
+
<source lang="xml">
+
<company>
+
  <employee id="1" name="Jane Doe">
+
      <reports>2 3</reports>
+
  </employee>
+
  <employee id="2" name="John Smith">
+
      <manager>1</manager>
+
  </employee>
+
  <employee id="3" name="Anne Jones">
+
      <manager>1</manager>
+
  </employee>
+
</company>
+
</source>
+
 
+
 
+
{{EclipseLink_MOXy
+
|previous=[[EclipseLink/UserGuide/MOXy/Relationships/Privately Owned/One-to-Many|Mapping One-to-Many Relationships]]
+
|next=    [[EclipseLink/UserGuide/MOXy/Relationships/Shared Reference/Keys and Foreign Keys/Composite Key|Mapping Composite Key Relationships]]
+
}}
+

Latest revision as of 09:26, 8 November 2012

See http://www.eclipse.org/eclipselink/documentation/2.4/moxy/shared_reference_relationships002.htm