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 강의를 공부한 글입니다
'프레임워크 > JPA' 카테고리의 다른 글
[JPA] 영속성 컨텍스트 (엔티티 매니저) (0) | 2022.03.23 |
---|---|
[JPA] 즉시로딩 지연로딩 (0) | 2022.03.23 |
[JPA] 여러가지 JPA 전략@Inheritance(strategy=InheritanceType.xxxx) (0) | 2022.03.21 |
[JPA] 일대일 [1:1] 연관관계 매핑 (0) | 2022.03.21 |
[JPA] 일대다( 1:N) 연관관계 (0) | 2022.03.17 |
댓글