[Spring] JPA - @MappedSuperclass

2025. 8. 27. 18:24·Back end/Spring Project
반응형

JPA를 사용하다 보면 여러 엔티티에서 공통으로 쓰이는 컬럼이 반복적으로 등장합니다.
예를 들어, id, 생성일, 수정일, 작성자 같은 필드는 대부분의 엔티티에서 공통적으로 관리됩니다.

이럴 때 JPA에서 제공하는 @MappedSuperclass를 사용하면 중복을 줄이고 깔끔하게 관리할 수 있습니다.


📖 @MappedSuperclass란?

  • 공통 매핑 정보를 모아두는 클래스
  • 엔티티가 아니며, 테이블과 직접 매핑되지 않음
  • 단순히 자식 엔티티에게 매핑 정보만 제공하는 역할
  • 따라서 em.find(BaseEntity) 같은 직접 조회는 불가능
@MappedSuperclass
public abstract class BaseEntity {

    @Id
    @GeneratedValue
    private Long id;

    private String createdBy;
    private LocalDateTime createdDate;
    private String modifiedBy;
    private LocalDateTime modifiedDate;

    // getter, setter
}

🛠️ 사용 예시

@Entity
public class Member extends BaseEntity {

    private String name;
    private String email;
}
@Entity
public class Order extends BaseEntity {

    private String orderNumber;
    private BigDecimal price;
}

위 예시에서 Member와 Order 엔티티는 BaseEntity의 공통 필드(id, createdBy, createdDate, modifiedBy, modifiedDate)를 상속받아 자동으로 매핑됩니다.


📌 특징

✅ 상속관계 매핑(@Inheritance) 과 다름

  • @MappedSuperclass는 단순히 필드 매핑만 상속
  • 조인이나 다형성 쿼리 같은 기능은 제공하지 않음

✅ 엔티티 아님

  • @Entity처럼 테이블과 직접 매핑되지 않음
  • 따라서 em.find(BaseEntity.class, id) → ❌ 불가

✅ 공통 필드 관리에 적합

  • 등록일, 수정일, 등록자, 수정자 같은 필드를 모아서 관리할 때 유용
  • 중복 코드 제거 및 유지보수성 향상

✅ 추상 클래스 권장

  • 직접 인스턴스화할 일이 없기 때문에 abstract class로 선언하는 것이 좋음
반응형

'Back end > Spring Project' 카테고리의 다른 글

[SpringBoot] SQL 쿼리 파라미터 로그 남기는 방법  (0) 2026.01.02
[Spring] JPA - 프록시(Proxy)  (0) 2025.08.29
[Spring] JPA 양방향 연관관계와 연관관계의 주인  (0) 2025.08.20
[Spring] JPA 준영속 상태(Detached)  (0) 2025.08.15
[Spring] JPA flush  (0) 2025.08.14
'Back end/Spring Project' 카테고리의 다른 글
  • [SpringBoot] SQL 쿼리 파라미터 로그 남기는 방법
  • [Spring] JPA - 프록시(Proxy)
  • [Spring] JPA 양방향 연관관계와 연관관계의 주인
  • [Spring] JPA 준영속 상태(Detached)
Kim-SooHyeon
Kim-SooHyeon
개발일기 및 알고리즘, 블로그 운영에 대한 글을 포스팅합니다. :) 목표: 뿌리 깊은 개발자 되기
    반응형
  • Kim-SooHyeon
    soo_vely의 개발로그
    Kim-SooHyeon
  • 전체
    오늘
    어제
    • 분류 전체보기 (258)
      • 알고리즘 (108)
        • 자료구조 (3)
        • Java (104)
        • Python (1)
      • Back end (73)
        • Spring Project (28)
        • Java (23)
        • API (1)
        • Python (0)
        • Django (3)
        • Linux (1)
        • 서버 (2)
        • 에러로그 (11)
        • 부스트 코스 (1)
      • Front end (9)
        • HTML, CSS (4)
        • JavaScript (4)
        • JQuery (0)
      • 기타 프로그래밍 (4)
        • Android Studio (1)
        • Arduino (2)
        • Azure Fundamental(AZ-900) (1)
      • 개발도구 (24)
        • IntelliJ (2)
        • Git (12)
        • SVN (0)
        • Eclipse (2)
        • 기타 Tool (8)
      • Database (17)
        • Oracle (11)
        • MySQL (0)
        • H2 Database (3)
        • ORM & JPA (1)
      • 자격증 (10)
        • 컴활 1급 (7)
        • 컴활 2급 (2)
        • SQLD (1)
      • 기타 (13)
        • 블로그 운영 (6)
        • 문서 (1)
        • 기타 (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    github
    spring
    solved.ac
    java
    구현
    단계별풀기
    오라클
    jpa
    1차원 배열
    Oracle
    for문
    springboot
    백준
    백준알고리즘
    배열
    BOJ
    백준 자바
    문자열
    알고리즘
    Git
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Kim-SooHyeon
[Spring] JPA - @MappedSuperclass
상단으로

티스토리툴바