Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
Difference between revisions of "EclipseLink/UserGuide/MOXy/Relationships/Bidirectional Relationships"
m (→Bidirectional Relationships) |
m |
||
Line 1: | Line 1: | ||
{{EclipseLink_UserGuide | {{EclipseLink_UserGuide | ||
|info=y | |info=y | ||
− | |api= | + | |api=y |
− | |apis= | + | |apis=* [http://www.eclipse.org/eclipselink/api/latest/org/eclipse/persistence/mappings/XMLTransient.html XMLTransient] |
+ | * [http://www.eclipse.org/eclipselink/api/latest/org/eclipse/persistence/mappings/XMLInverseReferenceMapping.html XMLInverseReferenceMapping] | ||
}} | }} | ||
= Bidirectional Relationships = | = Bidirectional Relationships = | ||
− | When binding JPA entities to XML | + | When binding JPA entities to XML, there are MOXy extensions will help you map a bidirectional relationship |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
In this sample model, notice that '''Customer''' has a relationship to '''Address''', and '''Address'' has a relationship ''back'' to '''Customer'''. In JPA, one direction of the relationship is mapped (the '''customer''' property on '''Address''); the other direction specifies a mapping to leverage. | In this sample model, notice that '''Customer''' has a relationship to '''Address''', and '''Address'' has a relationship ''back'' to '''Customer'''. In JPA, one direction of the relationship is mapped (the '''customer''' property on '''Address''); the other direction specifies a mapping to leverage. | ||
Line 97: | Line 94: | ||
|previous=[[EclipseLink/UserGuide/MOXy/Relationships/Collections and Maps|Collections and Maps]] | |previous=[[EclipseLink/UserGuide/MOXy/Relationships/Collections and Maps|Collections and Maps]] | ||
|up =[[EclipseLink/UserGuide/MOXy/Relationships|Relationships]] | |up =[[EclipseLink/UserGuide/MOXy/Relationships|Relationships]] | ||
− | |next =[[EclipseLink/UserGuide/MOXy/ | + | |next =[[EclipseLink/UserGuide/MOXy/Advanced XML Schema Concepts|Advanced XML Schema Concepts]] |
|version=2.2.0 DRAFT | |version=2.2.0 DRAFT | ||
}} | }} |
Revision as of 11:35, 5 April 2011
EclipseLink | |
Website | |
Download | |
Community | |
Mailing List • Forums • IRC • mattermost | |
Issues | |
Open • Help Wanted • Bug Day | |
Contribute | |
Browse Source |
Bidirectional Relationships
When binding JPA entities to XML, there are MOXy extensions will help you map a bidirectional relationship
In this sample model, notice that Customer has a relationship to Address, and Address has a relationship back to Customer. In JPA, one direction of the relationship is mapped (the customer property on Address); the other direction specifies a mapping to leverage.
Sample Model
import javax.persistence.*; @Entity public class Customer { @Id private long id; @OneToOne(mappedBy="customer", cascade={CascadeType.ALL}) private Address address; } import javax.persistence.*; @Entity public class Address implements Serializable { @Id private long id; @MapsId @OneToOne @JoinColumn(name="ID") private Customer customer; }
To marshal these objects to XML, mark one direction @XmlTransient' to prevent a JAXB infinite loop during marshalling. Normally, during unmarshalling (from XML-to-object), you are responsible for populating the back pointer
import javax.persistence.*; import javax.xml.bind.annotation.*; @Entity public class Address implements Serializable { @Id private long id; @OneToOne @JoinColumn(name="ID") @MapsId @XmlTransient private Customer customer; }
@XMLInverseReference
With the @XmlInverseReference annotation, MOXy will populate the back pointer automatically. In this sample, notice that the @XmlInverseReference annotation leverages the same "mappedBy" concept.
import javax.persistence.*; import org.eclipse.persistence.oxm.annotations.*; @Entity public class Address implements Serializable { @Id private long id; @OneToOne @JoinColumn(name="ID") @MapsId @XmlInverseReference(mappedBy="address") private Customer customer; }