@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
, AssociationOverride
Copyright © 2018,2020 Eclipse Foundation.
Use is subject to license terms.