Difference between revisions of "EclipseLink/UserGuide/MOXy/Mapping JPA Entities to XML/Keys and Foreign Keys"
m (New page: =Keys and Foreign Keys= This example demonstrates how to derive an XML representation from a set of JPA entities using JAXB when a JPA entity has compound primary keys. == JPA Entities =...) |
m |
||
Line 1: | Line 1: | ||
+ | {{EclipseLink_UserGuide | ||
+ | |info=y | ||
+ | |toc=n | ||
+ | |eclipselink=y | ||
+ | |eclipselinktype=MOXy | ||
+ | }} | ||
=Keys and Foreign Keys= | =Keys and Foreign Keys= | ||
Line 105: | Line 111: | ||
} | } | ||
</source> | </source> | ||
+ | |||
+ | |||
+ | {{EclipseLink_MOXy | ||
+ | |previous= [[EclipseLink/UserGuide/MOXy/Mapping_JPA_Entities_to_XML/Bidirectional_Relationships|Bidirectional Relationships]] | ||
+ | |up= [[EclipseLink/UserGuide/MOXy/Mapping_JPA_Entities_to_XML|Mapping JPA Entities to XML]] | ||
+ | |next= [[EclipseLink/UserGuide/MOXy/Web_Services|Web Services]] | ||
+ | |version=2.2.0 }} |
Revision as of 14:39, 11 April 2011
EclipseLink MOXy
EclipseLink | |
Website | |
Download | |
Community | |
Mailing List • Forums • IRC • mattermost | |
Issues | |
Open • Help Wanted • Bug Day | |
Contribute | |
Browse Source |
Keys and Foreign Keys
This example demonstrates how to derive an XML representation from a set of JPA entities using JAXB when a JPA entity has compound primary keys.
JPA Entities
@Entity public class PhoneNumber { @ManyToOne @JoinColumns({ @JoinColumn(name="E_ID", referencedColumnName = "E_ID"), @JoinColumn(name="E_COUNTRY", referencedColumnName = "COUNTRY") }) private Employee contact; }
@Entity @IdClass(EmployeeId.class) public class Employee { @Id @Column(name="E_ID") private BigDecimal eId; @Id private String country; @OneToMany(mappedBy="contact") private List<PhoneNumber> contactNumber; }
public class EmployeeId { private BigDecimal eId; private String country; }
JAXB Bindings
In this example, the XML acessor type will be set to FIELD for all the model classes. This can be set as a package level JAXB annotation.
@XmlAccessorType(XmlAccessType.FIELD) package com.example.model; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType;
Target Object
Because this example requires support beyond the JAXB specification, you can use the EclipseLink extension @XmlKey. Because the relationship is bidirectional, use the EclipseLink extension @XmlInverseReference.
@Entity @IdClass(EmployeeId.class) public class Employee { @Id @Column(name="E_ID") @XmlID private BigDecimal eId; @Id @XmlKey private String country; @OneToMany(mappedBy="contact") @XmlInverseReference(mappedBy="contact") private List<PhoneNumber> contactNumber; }
Source Object
Because the target object has a compound key, use the EclipseLink extension @XmlJoinNodes to set up the mapping.
Note: If the target object had a single ID, then you could use @XmlIDREF.
@Entity public class PhoneNumber { @ManyToOne @JoinColumns({ @JoinColumn(name="E_ID", referencedColumnName = "E_ID"), @JoinColumn(name="E_COUNTRY", referencedColumnName = "COUNTRY") }) @XmlJoinNodes( { @XmlJoinNode(xmlPath="contact/id/text()", referencedXmlPath="id/text()"), @XmlJoinNode(xmlPath="contact/country/text()", referencedXmlPath="country/text()") }) private Employee contact; }