- 상속 관계 매핑: 부모 클래스와 자식 클래스 모두를 데이터베이스 테이블과 매핑
-
- 단순히 매핑 정보를 상속할 목적으로만 사용부모 클래스는 테이블과 매핑하지 않고 상속받는 자식 클래스에게 매핑 정보만 제공하고 싶을 때 @MappedSuperclass를 사용
예제 코드
@MappedSuperclass
public abstract class BaseEntity {
@Id @GeneratedValue
private Long id;
private String name;
// ...
}
@Entity
public class Member extends BaseEntity {
private String email;
// ...
}
@Entity
public class Seller extends BaseEntity {
private String shopName;
// ...
}
- BaseEntity에는 객체들이 주로 사용하는 공통 매핑 정보를 정의
- 부모로부터 물려받은 매핑 정보를 재정의하려면 @AttributeOverrides(둘 이상)나 @AttributeOverride를 사용한다.
- 연관관계를 재정의하려면 @AssociationOverrides(둘 이상)나 @AssociationOverride를 사용한다.
@Entity
@AttributeOverride(name = "id", column = @Column(name = "MEMBER_ID"))
public class Member extends BaseEntity { . . . }
@Entity
@AttributeOverrides({
@AttributeOverride(name = "id", column = @Column(name = "MEMBER_ID")),
@AttributeOverride(name = "name", column = @Column(name = "MEMBER_NAME"))
})
public class Member extends BaseEntity { ... }
특징
- 테이블과 매핑되지 않고 자식 클래스에 엔티티의 매핑 정보를 상속하기 위해 사용한다.
- @MappedSuperclass로 지정한 클래스는 엔티티가 아니므로 em.find()나 JPQL에서 사용할 수 없다.
- 직접 사용할 일은 거의 없으므로 추상 클래스로 만드는 것을 권장한다.
- 등록일자, 수정일자, 등록자, 수정자 같은 공통 속성을 효과적으로 관리할 수 있다.
'Spring & JPA' 카테고리의 다른 글
[테코톡] API 중복 호출 해결기 (0) | 2025.04.02 |
---|---|
고급 매핑 - 3. 복합 키와 식별 관계 매핑 (0) | 2025.03.19 |
고급 매핑 - 1. 상속 관계 매핑 (0) | 2025.03.19 |
연관관계 (0) | 2025.03.17 |
[고대로] Redisson을 통한 분산 락 적용 (0) | 2025.03.05 |