Ответ 1
Спецификация спецификации JPA
Сущности могут расширять классы не-сущности, а также классы сущностей, а классы без сущностей могут расширять классы сущностей.
@javax.persistence.MappedSuperclass аннотации позволяет вам определить этот вид отображения
@MappedSuperclass
public class MyThing implements Serializable {
private int myNumber;
private String myData;
// getter and setter's
}
и
@Entity
@Table(name="MY_THING")
public class MyThingEntity extends MyThing {
}
Как указано в спецификации JPA
Обозначение MappedSuperclass обозначает класс , информация о сопоставлении которого применяется к объектам, которые наследуют от него.
и
Класс, обозначенный аннотацией MappedSuperclass , может быть сопоставлен так же, как и объект, за исключением того, что сопоставления будут применяться только к его подклассам, поскольку не существует таблицы для самого отображенного суперкласса.
Если вам нужно переопределить какое-либо свойство, определенное MyThing, используйте @AttributeOverride (если вы хотите переопределить одно свойство) или @AttributeOverrides (если вы хотите переопределить несколько свойств)
@Entity
@Table(name="MY_THING")
@AttributeOverride(name="myData", [email protected](name="MY_DATA"))
public class MyThingEntity extends MyThing {
}
и
@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 {
}
Если вы не хотите менять базовый класс, вы можете использовать xml для определения его как @MappedSuperClass
Знайте: по умолчанию поставщик сохранения будет искать в каталоге META-INF файл с именем orm.xml
<?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>
Больше ничего. Если вы хотите переопределить свойство, используйте @AttributeOverride, как показано выше.