본문 바로가기

Dev/JPA

RS) MappedSuperclass 매핑 정보 상속(상속관계X)

@MappedSuperclass

  • 공통 매핑 정보가 필요할 때 사용
  • 상속관계 매핑이 아니다.
  • 부모 클래스를 상속 받는 자식 클래스에 매핑 정보만 제공
  • 직접 생성해서 사용할 일이 없기 때문에 추상클래스로 사용하길 권함
  • 테이블이랑은 관계없고 단순히 엔티티가 공통으로 사용하는 매핑 정보를 모으는 역할
  • ex) 등록일, 수정일, 등록자, 수정자 같은 전체에 공통으로 적용되어야 할 정보들..
  • @Entity 클래스는 엔티티나 @MappedSuperclass로 지정한 클래스만 상속 가능

@MappedSuperclass의 사용

 

JPA에서는 Extends를 쓰려면 @Entity라는 어노테이션이 있거나 @MappedSuperclass가 있어야 한다.

  • @Entity를 적었을 경우는 상속관계를 하기 위해서 쓴다.
  • @MappedSuperclass는 공통적인 속성만 상속 받기 위해 사용

코드를 통해 살펴보자!

@Entity // 상속관계 매핑일 때 쓰이는 것
// 매핑 정보만 받는 부모클래스(superclass) - 속성만 상속 받는 것
@MappedSuperclass
public class BaseEntity {

    @Column(name = "INSERT_MEMBER")
    private String createdBy;
    private LocalDateTime createDateTime;
    @Column(name = "UPDATE_MEMBER")
    private String lastModifiedBy;
    private LocalDateTime lastModifiedDate;
  1. DBA의 요청으로 모든 엔티티에서 수정자, 등록자, 수정일, 등록일을 추가하라고 함.
  2. 개발자는 이를 위해 컬럼을 추가하기로 함.
  3. 모든 만들어진 엔티티에 각각 다 넣어줘야하는데 이게 너무너무 번거로운 작업이다.
  4. BaseEntity를 등장 시켜서 공통으로 사용해야할 컬럼들을 적어준다.
  5. 상속을 통해 필요한 엔티티들에서 공통적으로 BaseEntity를 상속받는다. (extends BaseEntity)
  6. 공통으로 사용하는 BaseEntity 는 @MappedSuperclass를 적어준다.
  7. 끝..

그림참조

'Dev > JPA' 카테고리의 다른 글

RS) 프록시와 연관관계  (0) 2022.03.02
RS) 상속관계 매핑  (0) 2022.02.22
RS) 다대다 관계  (0) 2022.02.17
RS) 연관관계 매핑시 주의할 점  (0) 2022.02.15
RS) 양방향 연관관계와 연관관계의 주인  (0) 2022.02.06