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.
EclipseLink/Examples/JPA/2.0/DerivedIdentifiers
< EclipseLink | Examples | JPA
Contents
How to use derived identifiers to map composite Ids through ManyToOne relationships
Defining an Id
for a OneToOne
or ManyToOne
in JPA 2.0 is much simpler. The @Id
annotation or id
XML attribute can be added to a OneToOne
or ManyToOne
mapping. The Id
used for the object will be derived from the target object's Id
. If the Id
is a single value, then the source object's Id
is the same as the target object's Id
. If it is a composite Id
, then the IdClass
will contain the Basic
Id
attributes, and the target object's Id
as the relationship value. If the target object also has a composite Id
, then the source object's IdClass
will contain the target object's IdClass
.
Example JPA 2.0 ManyToOne id annotation
... @Entity @IdClass(PhonePK.class) public class Phone { @Id private String type; @ManyToOne @Id @JoinColumn(name="OWNER_ID", referencedColumnName="EMP_ID") private Employee owner; ... }
Example JPA 2.0 ManyToOne id XML
<entity name="Phone" class="org.acme.Phone" access="FIELD"> <id-class class="org.acme.PhonePK"/> <id name="type"/> <many-to-one name="owner" id="true"> <join-column name="OWNER_ID" referencedColumnName="EMP_ID"/> </many-to-one> <entity/>
Example JPA 2.0 id class
... public class PhonePK { private String type; private long owner; public PhonePK() {} public PhonePK(String type, long owner) { this.type = type; this.owner = owner; } public boolean equals(Object object) { if (object instanceof PhonePK) { PhonePK pk = (PhonePK)object; return type.equals(pk.type) && owner == pk.owner; } else { return false; } } public int hashCode() { return type + owner; } }