@DocumentedSE @TargetSE(valueSE=TYPESE) @RetentionSE(valueSE=RUNTIMESE) public @interface MappedSuperclass
MappedSuperclass アノテーションで指定されたクラスはエンティティと同じ方法でマッピングできますが、マッピングされたスーパークラス自体にはテーブルが存在しないため、マッピングはそのサブクラスにのみ適用されます。サブクラスに適用されると、継承されたマッピングはサブクラステーブルのコンテキストで適用されます。マッピング情報は、AttributeOverride および AssociationOverride アノテーションまたは対応する XML 要素を使用することにより、そのようなサブクラスでオーバーライドできます。
Example: Concrete class as a mapped superclass
@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) { ... }
}
// Default table is FTEMPLOYEE table
@Entity
public class FTEmployee extends Employee {
// Inherited empId field mapped to FTEMPLOYEE.EMPID
// Inherited version field mapped to FTEMPLOYEE.VERSION
// Inherited address field mapped to FTEMPLOYEE.ADDR fk
// Defaults to 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 {
// Inherited empId field mapped to PT_EMP.EMPID
// Inherited version field mapped to PT_EMP.VERSION
// address field mapping overridden to PT_EMP.ADDR_ID fk
@Column(name="WAGE")
protected Float hourlyWage;
public PartTimeEmployee() {}
public Float getHourlyWage() { ... }
public void setHourlyWage(Float wage) { ... }
}
AttributeOverride, AssociationOverrideCopyright © 2019 Eclipse Foundation.
Use is subject to license terms.