[JPA] Mapped Superclass - 매핑 정보 상속 :: 잡다한 프로그래밍
반응형

JPA의 @MappedSuperclass 정리

@MappedSuperclass는 공통 매핑 정보만 제공하는 용도의 클래스에 붙이는 JPA 애노테이션입니다.
실제 엔티티나 테이블로 매핑되지 않으며, 자식 엔티티가 이 클래스의 필드를 그대로 자신의 필드처럼 포함하여 테이블 컬럼으로 매핑되도록 합니다.

 

언제 사용하는가?

  • 여러 엔티티에 공통된 필드(ex. 생성일, 수정일, 삭제일 등)가 반복될 때
  • 상속 관계를 표현하려는 것이 아니라, 중복 제거 및 일관성 유지가 목적일 때
  • JPA의 상속 전략(@Inheritance) 을 사용하지 않고 테이블은 각각 따로 유지하고 싶을 때

@MappedSuperclass
pulbic abstract class BaseEntity {
	private LocalDateTime createdAt;
    private LocalDateTime updatedAt;
    private LocalDateTime deletedAt;
}
@Entity
public class Member extends BaseEntity {
	private String name;
}

 

 

  • BaseEntity는 엔티티도 아니고 테이블도 생성되지 않습니다.
  • 대신 Member, Seller 등의 하위 클래스 테이블에 created_at, updated_at, deleted_at 컬럼이 자동으로 포함됩니다.
  • 이 방식은 ORM의 매핑 정보를 재사용하는 것이지, DB 상속 전략을 구현하는 것은 아님.
  • 따라서 직접 조회, 검색 불가
  • 직접 테이블 생성할 일 없으므로 추상클래스 권장
반응형

+ Recent posts