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/MappedSuperclass
EclipseLink JPA
EclipseLink | |
Website | |
Download | |
Community | |
Mailing List • Forums • IRC • mattermost | |
Issues | |
Open • Help Wanted • Bug Day | |
Contribute | |
Browse Source |
Examples
@MappedSuperclass
You can use the @MappedSuperclass annotation or <mapped-superclass>
XML element to define mappings for an abstract or non-persistent superclass, that are inherited by its subclass entities.
For more information, see Section 2.1.9 "Inheritance" in the JPA Specification.
For more information, see Section 9.1.x "MappedSuperclassAnnotation" in the JPA Specification.
@AttributeOverride
You can use the @DiscriminatorColumn annotation or <discriminator-column>
XML element to configure the name or type of the inheritance discriminator column. The discriminator column is required for SINGLE_TABLE
and JOINED
inheritance and stores the associated entity type for the row. The default name for the discriminator column is DTYPE
. JPA only allows String or Integer values for discriminators. Through the EclipseLink API, it is possible to use other discriminator types, and it is possible to not have a discriminator, or use custom discriminator, see Advanced Inheritance Configuration.
Attribute | Description | Default | Required? |
---|---|---|---|
name | The name of column to be used to store the class discriminator value. | DTYPE |
No |
discriminatorType | The type of the discriminator value, defined in DiscriminatorType , one of STRING , INTEGER , and CHAR .
| STRING |
No |
columnDefinition | Optional column description for use with DDL generation. | generated base on discriminatorType | No |
length | The size of the column for DDL generation. Only relevant for STRING types. |
31 | No |
For more information, see Section 11.1.10 "DiscriminatorColumn Annotation" in the JPA Specification.
@AssociationOverride
You can use the @DiscriminatorValue annotation or <discriminator-value>
XML element to configure the value of the inheritance discriminator. The discriminator value can be specified in each non-abstract class in the inheritance hierarchy. By default the discriminator value is the entity's name, which defaults to its unprefixed class name. The discriminator value is always specified as a String, but is converted to the discriminator column type.
The following examples shows usages of the three different inheritance strategies for mapping an Account
hierarchy.
Example: Using SINGLE_TABLE
with @Inheritance annotation
CREATE TABLE ACCOUNT (ID NUMBER, ACCOUNT_TYPE VARCHAR(31), BALANCE NUMBER, INTERESTRATE NUMBER, RETURNCHECKS BOOLEAN)
@Entity @Table(name="ACCOUNT") @Inheritance(strategy=InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name="ACCOUNT_TYPE") public abstract class Account implements Serializable { @Id private Long id; @Basic private BigDecimal balance; ... }
@Entity @DiscriminatorValue("SAVINGS") public class SavingAccount extends Account { @Basic private BigDecimal interestRate; }
@Entity @DiscriminatorValue("CHECKING") public class CheckingAccount extends Account { @Basic private boolean returnChecks; }
Example: Using SINGLE_TABLE
with <inheritance>
XML
<entity class="Account"> <table name="ACCOUNT"/> <inheritance strategy="SINGLE_TABLE"/> <discriminator-column name="ACCOUNT_TYPE"/> <attributes> <id name="id"/> <basic name="balance"/> </attributes> </entity>
<entity class="SavingAccount"> <discriminator-value>SAVINGS</discriminator-value> <attributes> <basic name="interestRate"/> </attributes> </entity>
<entity class="CheckingAccount"> <discriminator-value>CHECKING</discriminator-value> <attributes> <basic name="returnChecks"/> </attributes> </entity>