728x90

 

 

 

 

@MappedSupercass란❓

@MappedSuperclass는 JPA(Java Persistence API)에서 사용하는 어노테이션으로, 객체 관계 매핑에서 부모 클래스가 공통적으로 제공하는 매핑 정보를 자식 클래스에 상속하고자 할 때 사용됩니다.

 

이 어노테이션은 부모 클래스에 붙여지며, 이 클래스를 상속받는 모든 자식 엔티티 클래스들은 부모 클래스에서 정의한 매핑 정보를 물려받게 됩니다.

 

주요 특징

 

  • 테이블 매핑 없음
    • @MappedSuperclass가 붙은 클래스 자체는 데이터베이스 테이블과 매핑되지 않습니다.
      • 즉, 이 클래스는 테이블로 매핑되지 않으며, 데이터베이스에 대응되는 물리적 테이블을 생성하지 않습니다.
    • 대신, 이 클래스를 상속받는 엔티티 클래스들이 이 클래스에서 정의한 필드와 매핑 정보를 상속받아 자신의 테이블에 포함시킵니다.
  • 상속 구조
    • 상속을 통해 공통적인 필드(예: id, createdAt, updatedAt 등)를 여러 엔티티에서 재사용할 수 있습니다.
      • 예를 들어, 여러 엔티티 클래스에서 공통적으로 사용되는 필드를 @MappedSuperclass로 정의해두면, 이를 상속받는 엔티티 클래스들이 해당 필드를 자동으로 포함하게 됩니다.
  • 재사용성
    • 코드의 재사용성일관성을 높여줍니다.
    • 여러 엔티티에서 반복적으로 사용되는 필드나 메서드를 하나의 상위 클래스에 정의함으로써, 코드의 중복을 줄이고 유지보수를 쉽게 할 수 있습니다.
  • JPA 상속 전략과의 차이
    • JPA의 상속 전략(@Inheritance)과는 다릅니다.
      • @Inheritance는 하나의 엔티티 계층 구조를 단일 테이블, 조인된 테이블, 또는 구체적인 테이블 전략으로 매핑하는 데 사용되며, 실제 데이터베이스에서 여러 테이블을 관리하게 됩니다.
    • 반면에 @MappedSuperclass 테이블 매핑을 하지 않으며, 단순히 상속된 엔티티 클래스의 테이블에 필드를 추가하는 방식입니다.