본문 바로가기
프레임워크/JPA

[JPA] MappedSuperclass 란

by Yikanghee 2022. 3. 23.

MappedSuperclass

  • 객체의 입장에서 공통 매핑 정보가 필요할 때 사용한다
  • 공통 매핑 정보가 필요할 때, 부모 클래스에 선언하고 속성만 상속 받아서 사용하고 싶을 때 @MappedSuperclass를 사용한다

코드

  • 공통의 매핑 정보를 갖는 추상 클래스를 만들어준다
@Getter
@Setter
@MappedSuperclass
public abstract class BaseEntity {

	private String createBy;
	//생성자
	private LocalDateTime createDate;
	//생성시간
	private String lastModifiedBy;
	//수정자
	private LocalDateTime lastModifiedDate;
	//수정시간
}
  • 만들어 놓은 추상 클래스를 사용한다
@Entity
public class Member extends BaseEntity {
 ...
}
@Entity
public class Team extends BaseEntity {
 ...
}
  • DDL를 실행시키면 다음과 같은 결과가 생성된다
Hibernate: 
    create table Member (
       id bigint generated by default as identity,
        createdBy varchar(255),
        createdDate timestamp,
        lastModifiedBy varchar(255),
        lastModifiedDate timestamp,
        age integer,
        description clob,
        roleType varchar(255),
        name varchar(255),
        locker_id bigint,
        team_id bigint,
        primary key (id)
    )
Hibernate: 
    create table Team (
       id bigint generated by default as identity,
        createdBy varchar(255),
        createdDate timestamp,
        lastModifiedBy varchar(255),
        lastModifiedDate timestamp,
        name varchar(255),
        primary key (id)
    )
  • MappedSuperclass 특징
    • 상속관계 매핑이 아니다
    • 엔티티가 아니고, 테이블과 매핑하지 않는다
    • 부모 클래스를 상속 받는 자식 클래스에 매핑 정보만 제공한다
    • 조회, 검색 불가 (em.find(BaseEntity)) 제공 안함
    • 직접 생성해서 사용할 일이 없으므로 추상 클래스를 권장한다

이 글은 김영한님의 JPA 강의를 공부한 글입니다

댓글