especificación JPA afirma
Entidades pueden extenderse clases no entidad, así como clases de entidad, y clases de no-entidad pueden extender las clases de entidad.
@ javax.persistence.MappedSuperclass anotación le permite definir este tipo de mapeo
@MappedSuperclass
public class MyThing implements Serializable {
private int myNumber;
private String myData;
// getter's and setter's
}
Y
@Entity
@Table(name="MY_THING")
public class MyThingEntity extends MyThing {
}
Según lo dicho por la especificación JPA
La anotación MappedSuperclass designa una clase cuya información de mapeo se aplica a las entidades que heredan de ella.
Y
Una clase designada con la anotación MappedSuperclass se puede asignar de la misma manera como una entidad excepto que las asignaciones se aplicarán únicamente a sus subclases ya que no existe la tabla de la superclase asignada sí mismo.
Si necesita reemplazar alguna propiedad definida por MYTHing, utilice @AttributeOverride (cuando se desea anular una sola propiedad) o @AttributeOverrides (cuando se desea anular más de una propiedad)
@Entity
@Table(name="MY_THING")
@AttributeOverride(name="myData", [email protected](name="MY_DATA"))
public class MyThingEntity extends MyThing {
}
Y
@Entity
@Table(name="MY_OTHER_THING")
@AttributeOverrides({
@AttributeOverride(name="myData1", [email protected](name="MY_DATA_1")),
@AttributeOverride(name="myData2", [email protected](name="MY_DATA_2"))
})
public class MyOtherThingEntity extends MyThing {
}
Si no desea cambiar su clase base, puede utilizar XML para definirla como una @MappedSuperclass
Tenga en cuenta: por defecto, el proveedor de persistencia buscará en el directorio META-INF para un orm.xml llamado
<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd" version="1.0">
<mapped-superclass class="MyThing">
</mapped-superclass>
</entity-mappings>
Nada más archivo. Si desea anular una propiedad, use @AttributeOverride como se muestra arriba
sospecho que la idea es no cambiar la clase MyThing –
Maxime es correcto, no quiero tocar el POJO base. Todavía podría funcionar, '@MappedSuperclass MyThingMapper extiende MyThing .... MyThingEntity extends MyThingWrapper' – Freiheit
@Freiheit Agregado a la respuesta original –