Jump to: navigation, search

EclipseLink/UserGuide/JPA/Basic JPA Development/Entities/Ids/EmbeddedId

EclipseLink JPA

Mailing ListForumsIRC
Help Wanted
Bug Day
Browse Source

Elug api package icon.png Key API


Use the @EmbeddedId annotation to specify an embeddable composite primary key class (usually made up of two or more primitive or JDK object types) owned by the entity.

Elug note icon.png

Note: Composite primary keys typically arise during mapping from legacy databases when the database key is comprised of several columns.

A composite primary key class has the following characteristics:

  • It is a POJO class.
  • It is a public class with a public no-argument constructor.
  • If you use property-based access, the properties of the primary key class are public or protected.
  • It is serializable.
  • It defines equals and hashCode methods. The semantics of value equality for these methods must be consistent with the database equality for the database types to which the key is mapped.
  • An instance of the EmbeddedId is used with the EntityManager find() operation, to find an entity by its id.

Alternatively, you can make the composite primary key class a nonembedded class (see @IdClass).

The @EmbeddedId annotation does not have attributes.

This example shows a typical composite primary key class annotated with @Embeddable. The Usage of @EmbeddedId Annotation example shows how to configure an entity with this embeddable composite primary key class using the @EmbeddedId annotation.

Example: Embeddable Composite Primary Key Class
public class EmployeePK implements Serializable {
    private String empName;
    private long empID;
    public EmployeePK() {
    public String getName() {
        return this.empName;
    public void setName(String name) {
        this.empName = name;
    public long getEmpID() {
        return this.empID;
    public void setEmpID(long id) {
        this.empID = id;
    public int hashCode() {
        return (int)this.empName.hashCode()+ this.empID;
    public boolean equals(Object obj) {
        if (obj == this) return true;
        if (!(obj instanceof EmployeePK)) return false;
        EmployeePK pk = (EmployeePK) obj;
        return pk.empID == this.empID && pk.empName.equals(this.empName);

Example: @EmbeddedId Annotation
public class Employee implements Serializable {
    EmployeePK primaryKey;
    public Employee {
    public EmployeePK getPrimaryKey() {
        return primaryKey:
    public void setPrimaryKey(EmployeePK pk) {
        primaryKey = pk;
Example: <embedded-id> XML
<entity class="Employee">
        <embedded-id name="primaryKey"/>
<embeddable class="EmployeePK"/>
Elug javaspec icon.gif

For more information, see 1.1.15 "EmbeddedId Annotation" in the JPA Specification.

Version: 2.2.0 DRAFT
Other versions...