Spring & JPA

고급 매핑 - 2. @MappedSuperclass

진진리 2025. 3. 19. 19:11
  • 상속 관계 매핑: 부모 클래스와 자식 클래스 모두를 데이터베이스 테이블과 매핑
    • 단순히 매핑 정보를 상속할 목적으로만 사용부모 클래스는 테이블과 매핑하지 않고 상속받는 자식 클래스에게 매핑 정보만 제공하고 싶을 때 @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에서 사용할 수 없다.
  • 직접 사용할 일은 거의 없으므로 추상 클래스로 만드는 것을 권장한다.
  • 등록일자, 수정일자, 등록자, 수정자 같은 공통 속성을 효과적으로 관리할 수 있다.