Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
EclipseLink/UserGuide/JPA/Basic JPA Development/Entities/Embeddable
EclipseLink JPA
EclipseLink | |
Website | |
Download | |
Community | |
Mailing List • Forums • IRC • mattermost | |
Issues | |
Open • Help Wanted • Bug Day | |
Contribute | |
Browse Source |
@Embeddable
You can use the @Embeddable annotation or <embeddable>
XML element to map an embedded class. A mapped superclass is a special type of class that is not persistent itself, but has subclasses that are persistent. A mapped superclass is useful for defined a common persistence superclass that defines common behavior across a set of classes, such as an id or version attribute. A mapped superclass should normally be abstract but is not required to be, but cannot have any persistent instances.
Mapped superclasses cannot define a table, but can define mapping for its attributes and other common persistence behavior. Entities cannot have relatinoships to mapped superclasses, and mapped superclasses cannot be queried.
The @Embeddable annotation does not have any attributes.
For more information, see Section 2.1.9 "Inheritance" in the JPA Specification.
For more information, see Section 11.1.34 "MappedSuperclass Annotation" in the JPA Specification.
@AttributeOverride
You can use the @AttributeOverride and @AttributeOverrides annotations, or <attribute-override>
XML element to override the column for a basic attribute in an embedded relationship mapping. This allows for the column name to be different if the embeddable class is used by more than entity or if an entity defines multiple embedded relationships.
Attribute | Description | Default | Required? |
---|---|---|---|
name | The name of the attribute. | Yes | |
column | The column in the source table for the embedded relationship. | column defined in embeddable |
No |
For more information, see Section 11.1.4 "AttributeOverride Annotation" in the JPA Specification.
@AssociationOverride
You can use the @AssociationOverride and @AssociationOverrides annotations, or <association-override>
XML element to override the join column or join table for a relationship attribute in an embedded relationship mapping. This allows for the join column name to be different if the embeddable class is used by more than entity or if an entity defines multiple embedded relationships.
Attribute | Description | Default | Required? |
---|---|---|---|
name | The name of the attribute. | Yes | |
joinColumn | The join column in the source table for the embedded relationship. | join column defined in mapped superclass |
No |
joinTable | The join table for the subclass. | join table defined in mapped superclass |
No |
For more information, see Section 11.1.2 "AssociationOverride Annotation" in the JPA Specification.
The following example shows usages of a generic persistence mapped superclass.
Example: Using @MappedSuperClass annotation
@MappedSuperclass public abstract class PersistentObject implements Serializable { @Id private Long id; @Version private Long version; ... }
@Entity @Table("EMP") public class Employee extends PersistentObject { @Basic private String name; ... }
@Entity @Table("PROJECT") @AttributeOverride(name="id" column=@Column(name="PROJ_ID")) public class Project extends PersistentObject { @Basic private String name; ... }
Example: Using <mapped-superclass>
XML
<mapped-superclass class="PersistentObject"> <attributes> <id name="id"/> <version name="version"/> </attributes> </mapped-superclass> <entity class="Employee"> <table name="EMP"> <attributes> <basic name="name"/> ... </attributes> </entity> <entity class="Project"> <table name="PROJECT"> <attribute-override name="id"> <column name="PROJ_ID"/> </attribute-override> <attributes> ... </attributes> </entity>