JPA 规范状态
实体可以扩展非实体类以及实体类,非实体类可以扩展实体类。
@javax.persistence.MappedSuperclass annotation 允许您定义这种映射
@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,如上所示