어노테이션 설명
- 매핑 정보가 상속되는 엔티티에 적용되는 클래스를 지정
- 매핑된 상위클래스는 별도의 테이블이 없다.
- @MappedSuperclass가 지정된 클래스는 Entity와 동일한 방법으로 매핑될 수 있다.
- 매핑은 테이블이 없으므로 하위 클래스에만 적용된다.
- 슈퍼클래스에 적용되었을 떄, 상속받은 클래스에 상위클래스 테이블의 context를 적용할 수 있다.
- AttributeOverride 및 AssociationOverride 어노테이션 또는 해당 XML elements를 사용하여 이러한 하위 클래스에 하여 재정의 할 수 있다.
어노테이션 용도
- Entity별 공통 요소를 상속 필요성
- @MappedSuperclass를 이용하여 공통요소를 Super Class에 정의
- 간소화된 Entity
- 공통 컬럼명을 override가 필요한 경우 @AttributeOverride로 재정의
예시 코드
@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) { ... }
}
- @AssociationOverride 어노테이션을 통해 address 속성을 ADDR_ID를 조인컬럼으로 사용
@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) { ... }
}
'Basic > JPA' 카테고리의 다른 글
[JPA] CRUD 전략 (0) | 2020.07.14 |
---|---|
[JPA] JPA 연관 (0) | 2020.06.16 |
[JPA] 살펴보기 (0) | 2020.06.16 |