@Documented
@Target(value=TYPE)
@Retention(value=RUNTIME)
public @interface MappedSuperclass
MappedSuperclass
アノテーションで指定されたクラスは、マップドスーパークラス自体のテーブルが存在せずマッピングはそのサブクラスにのみ適用される点を除き、エンティティと同じ方法でマッピングできます。
サブクラスに適用すると、継承されたマッピングがサブクラスのテーブルのコンテキストで適用されます。
マッピング情報は、AttributeOverride
アノテーションまたはAssociationOverride
アノテーションまたはそれらに対応するXML要素を使用してそのようなサブクラスでオーバーライドできます。
Example: マップドスーパークラスとして固められたクラス @MappedSuperclass public class Employee { @Id protected Integer empId; @Version protected Integer version; @ManyToOne @JoinColumn(name="ADDR") protected Address address; public Integer getEmpId() { ... } public void setEmpId(Integer id) { ... } public Address getAddress() { ... } public void setAddress(Address addr) { ... } } // デフォルトはFTEMPLOYEEテーブル @Entity public class FTEmployee extends Employee { // FTEMPLOYEE.EMPIDにマッピングされた継承されたempIdフィールド // FTEMPLOYEE.VERSIONにマッピングされた継承されたversionフィールド // FTEMPLOYEE.ADDR(fk)にマッピングされた継承されたaddressフィールド // デフォルトはFTEMPLOYEE.SALARY protected Integer salary; public FTEmployee() {} public Integer getSalary() { ... } public void setSalary(Integer salary) { ... } } @Entity @Table(name="PT_EMP") @AssociationOverride( name="address", joincolumns=@JoinColumn(name="ADDR_ID")) public class PartTimeEmployee extends Employee { // FTEMPLOYEE.EMPIDにマッピングされた継承されたempIdフィールド // FTEMPLOYEE.VERSIONにマッピングされた継承されたversionフィールド // FTEMPLOYEE.ADDR(fk)にマッピングされた継承されたaddressフィールド @Column(name="WAGE") protected Float hourlyWage; public PartTimeEmployee() {} public Float getHourlyWage() { ... } public void setHourlyWage(Float wage) { ... } }
AttributeOverride
,
AssociationOverride
Translated by @megascus.