오봉이와 함께하는 개발 블로그
JPA - @Mapped Superclass 본문
728x90
@MappedSuperclass
상속관계 매핑과는 관련이 별로 없고, 엔티티와 테이블과의 매핑과도 마찬가지다.
부모 클래스를 상속 받는 자식 클래스에만 매핑 정보가 제공되기 때문에 객체의 입장에서 같은 이름의 컬럼을 가진 변수가 있을 때 부모 클래스에 두고 속성만 상속받아 사용하고 싶을 때 사용한다.
조회, 검색이 불가능하기 때문에 직접 생성해서 사용할 일이 없어서 추상 클래스로 사용하는 것을 권장한다.(em.find(BaseEntity) 불가능)
즉, 공통 매핑 정보가 필요할 때 사용한다.(id, name)
사용
private String createdBy;
private LocalDateTime createdDate;
private String lastModifiedBy;
private LocalDateTime lastModifiedDate;
예를 들어 모든 테이블에 위와 같은 정보가 필요할 때, 개발자 입장에서 모든 클래스에 위 정보를 넣기는 귀찮은 일이다.
아래와 같이 작성해보자.
@MappedSuperclass
@Getter @Setter
public abstract class BaseEntity {
private String createdBy;
private LocalDateTime createdDate;
private String lastModifiedBy;
private LocalDateTime lastModifiedDate;
}
@Entity
@Getter @Setter
public class Member extends BaseEntity{
/*
.................
*/
}
// 메인 메소드
Member member = new Member();
member.setName("kim");
member.setCreatedBy("kim");
member.setCreatedDate(LocalDateTime.now());
em.persist(member);
상속 받은 모든 클래스로부터 생성된 모든 테이블에 해당 BaseEntity에 명시한 모든 컬럼이 적용된다.
정리
테이블과 관계 없고, 단순히 엔티티가 공통으로 사용하는 매핑 정보를 모으는 역할을 한다.
주로 등록일, 수정일, 등록자, 수정자 같은 전체 엔티티에서 공통으로 적용하는 정보를 모을 때 사용한다.
출처 : 인프런 김영한 지식공유자님의 스프링 부트와 JPA 실무 완전 정복 로드맵 강의
728x90
'BE > JPA' 카테고리의 다른 글
JPA - 프록시 (0) | 2022.06.28 |
---|---|
JPA - 실전 예제 4 - 상속관계 매핑 (0) | 2022.06.28 |
JPA - 상속관계 매핑 (0) | 2022.06.28 |
JPA - 실전 예제 3 - 다양한 연관관계 매핑 (0) | 2022.06.27 |
JPA - 연관관계 매핑 1:1, N:M (0) | 2022.06.27 |
Comments