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,如上所示