2.2.4. Mapping inheritance
EJB3 supports the three types of inheritance:
- Table per Class Strategy: the <union-class> element in Hibernate
- Single Table per Class Hierarchy Strategy: the <subclass> element in Hibernate
- Joined Subclass Strategy: the <joined-subclass> element in Hibernate
The chosen strategy is declared at the class level of the top level entity in the hierarchy using the
@Inheritance
annotation.
Note
Annotating interfaces is currently not supported.
2.2.4.1. Table per class
This strategy has many drawbacks (esp. with polymorphic queries and associations) explained in the EJB3 spec, the Hibernate reference documentation, Hibernate in Action, and many other places. Hibernate work around most of them implementing this strategy using
SQL UNION
queries. It is commonly used for the top level of an inheritance hierarchy:
@Entity @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) public class Flight implements Serializable {
This strategy support one to many associations provided that they are bidirectional. This strategy does not support the
IDENTITY
generator strategy: the id has to be shared across several tables. Consequently, when using this strategy, you should not use AUTO
nor IDENTITY
.