Состояния спецификации JPA
Сущности могут расширять классы не-сущностей, а также классы сущностей , а классы не-сущностей могут расширять классы сущностей.
@javax.persistence.MappedSuperclass аннотация позволяет вам определять этот тип отображения
@MappedSuperclass
public class MyThing implements Serializable {
private int myNumber;
private String myData;
// getter's 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", column=@Column(name="MY_DATA"))
public class MyThingEntity extends MyThing {
}
И
@Entity
@Table(name="MY_OTHER_THING")
@AttributeOverrides({
@AttributeOverride(name="myData1", column=@Column(name="MY_DATA_1")),
@AttributeOverride(name="myData2", column=@Column(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, как показано выше