@MappedSuperclass 란?

진기·2024년 1월 22일

Springboot

목록 보기
6/9

📌 @MappedSuperclass

  • 객체의 입장에서 공통 매핑 정보가 필요할 때 사용한다.
  • id, name은 객체의 입장에서 볼 때 계속 나온다.
  • 이렇게 공통 매핑 정보가 필요할 때, 부모 클래스에 선언하고 속성만 상속 받아서 사용하고 싶을 때 @MappedSuperclass를 사용한다.
  • 단순히 매핑 정보를 상속할 목적으로만 사용된다!
  • 이 클래스를 직접 생성해서 사용할 일은 거의 없으므로 추상 클래스로 만드는 것을 권장한다.

이 그림은 Member와 Seller 엔티티 클래스를 나타내는 이미지이다. 여기서 우리는 두 엔티티는 서로 연관이 없다는 것과 각 엔티티가 ID, Name 속성을 공통으로 가지고 있는 것을 확인할 수 있다. 이 때 공통된 두 칼럼 ID와 Name을 부모 클래스로 모으고 객체 상속 관계로 만든 것을 확인할 수 있다. 이 때 부모 클래스인 BaseEntity는 자식들에게 상속을 통해 칼럼 정보를 제공하는 역할을 할 뿐이다. 즉 BaseEntity를 테이블로 매핑할 필요가 없고 칼럼 정보만 자식에게 제공해주면 된다.

예시 코드

@MappedSuperClass // @Entity 대신 사용
public abstract class BaseEntity { 
	
   @Id
   @GeneratedValue
   private Long id;
   private String name;
   
   ...
}

-----------------------------------

@Entity
public class Member extends BaseEntity {
	
   // ID, name 상속받음
   private String email;
   
   ...
}

@Entity
public class Seller extends BaseEntity {

	// ID, name 상속받음
   private String shopName;
	
   ...
}
  • 앞에서 언급한 바와 같이 부모 클래스인 BaseEntity는 테이블로 매핑할 필요가 없다.

  • 이를 위해 @Entity 어노테이션 대신 @MappedSuperClass 를 사용하면 된다.

  • 실제로 @MappedSuperclass 는 엔티티 리스너와 함께 등록일자, 수정일자, 등록자, 수정자와 같은 모든 테이블에 공통으로 필요한 칼럼을 효과적으로 관리하는데에 자주 사용된다.

    ✓ 엔티티 클래스는 @Entity 와 @MappedSuperclass 가 선언된 클래스만 상속할 수 있다!

profile
개발 성장 이야기

0개의 댓글