@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,
AssociationOverrideTranslated by @megascus.