Nonentity Base Classes
The inheritance mappings we described so far in this chapter concerned a
class hierarchy of entity beans. Sometimes, however, you need to inherit
from a nonentity superclass. This
superclass may be an existing class in your domain model that you do not
want to make an entity. The @javax.persistence.MappedSuperclass annotation
allows you to define this kind of
mapping. Let’s modify our example class hierarchy and change Person into a mapped superclass:
@MappedSuperclass public class Person { @Id @GeneratedValue public int getId( ) { return id; } public void setId(int id) { this.id = is; } ... } @Entity @Table(name="CUSTOMER") @Inheritance(strategy=InheritanceType.JOINED) @AttributeOverride(name="lastname", column=@Column(name="SURNAME")) public class Customer extends Person { ... } @Entity @Table(name="EMPLOYEE") @PrimaryKeyJoinColumn(name="EMP_PK") public class Employee extends Customer { ... }
Since it is not an entity, the mapped superclass does not have an
associated table. Any subclass inherits the
persistence properties of the base class. You can override any mapped property of the mapped class by
using the @javax.persistence.AttributeOverride
annotation.
You can have @MappedSuperclass
annotated classes in between two @Entity annotated classes in a given hierarchy.
Also, nonannotated classes (i.e., not annotated with @Entity or @MappedSuperclass) are completely ignored by the
persistence provider.