본문 바로가기
  • Let's study
BackEnd/Spring

[Spring] BaseEntity와 @MappedSuperclass

by 코딩고수이고파 2026. 8. 4.

BaseEntity를 사용하는 이유

대부분의 엔티티에는 공통 필드가 존재한다.

  • id
  • 생성일(createdDate)
  • 수정일(modifiedDate)

모든 엔티티마다 동일한 코드를 작성하면 중복이 발생한다.

그래서 공통 속성을 BaseEntity에 모아두고 상속해서 사용한다.

@MappedSuperclass

@MappedSuperclass는 공통 속성을 여러 엔티티에서 재사용하기 위한 어노테이션이다.

  • 실제 테이블과 매핑되지 않고, 상속받는 엔티티의 테이블에 컬럼으로 포함됨
  • 공통으로 사용되는 필드(예: 생성일시, 수정일시 등)를 한 곳에서 관리할 수 있음
  • 엔티티 클래스에서 @MappedSuperclass가 적용된 클래스를 상속받아 사용
  • 상속 관계 매핑이 아닌 단순히 공통 속성을 재사용하는 용도로 사용
  • @Entity 어노테이션과 함께 사용할 수 없음
  • 추상 클래스로 선언하는 것이 일반적

예를 들어

@MappedSuperclass
public abstract class BaseEntity {
    ...
}
@Entity
public class Post extends BaseEntity {
}
 

Post 테이블에는 BaseEntity의 필드가 함께 생성된다.

abstract를 사용하는 이유

BaseEntity는 공통 기능만 제공하는 클래스이다.

직접 생성할 일이 없다.

new BaseEntity();
 

이런 코드는 의미가 없기 때문에

public abstract class BaseEntity
 

로 선언하여 객체 생성을 막는다.

즉, 코드의 의도를 명확하게 하기 위해 추상 클래스로 선언한다.

'BackEnd > Spring' 카테고리의 다른 글

[Spring] 외래키  (0) 2026.08.04
[Spring] 테스트 환경 분리(dev / test)  (0) 2026.08.04
[Spring] 더티 체킹(Dirty Checking)  (0) 2026.08.04
[Spring] @Component, @Transactional, JPA Auditing  (0) 2026.07.31
[Spring] intelliJ 세팅  (0) 2026.07.31

댓글