728x90
반응형
@MappedSuperclass
- 객체의 입장에서 공통 매핑 정보가 필요할 때 사용한다.
- id, name은 객체의 입장에서 볼 때 계속 나온다.
- 이렇게 공통 매핑 정보가 필요할 때, 부모 클래스에 선언하고 속성만 상속 받아서 사용하고 싶을 때 @MappedSuperclass를 사용한다.
- DB 테이블과는 상관없다. 아래에 보면 DB는 매핑 정보 다 따로 쓰고 있다. 객체의 입장이다.
코드로 이해하기
- 생성자, 생성시간, 수정자, 수정시간을 모든 엔티티에 공통으로 가져가야 하는 상황에서
- 아래와 같이 BaseEntity를 정의해서 활용할 수 있다.
- BaseEntity.java
- 매핑정보만 상속받는 Superclass라는 의미의 @MappedSuperclass 어노테이션 선언
@Getter @Setter @MappedSuperclass public abstract class BaseEntity { private String createdBy; private LocalDateTime createdDate; private String lastModifiedBy; private LocalDateTime lastModifiedDate; }
- Member.java, Team.java
- BaseEntity 상속
@Entity public class Team extends BaseEntity { ... }
- @Entity
public class Member extends BaseEntity {
...
}
- BaseEntity 상속
- 실행된 DDL
- BaseEntity에 선언된 컬럼들이 생성 된다.
- 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에서 @Entity 클래스는 @Entity나 @MappedSuperclass로 지정한 클래스만 상속할 수 있다.
Reference
출처: https://ict-nroo.tistory.com/129 [개발자의 기록습관]
728x90
반응형
'Study > JPA' 카테고리의 다른 글
Spring Data JPA - QueryDSL 쿼리 작성하기 (0) | 2022.05.13 |
---|---|
[JPA] AuditEntity관련 내용 정리 (0) | 2022.04.19 |
[DAO] DAO, DTO, Entity Class의 차이 (0) | 2022.04.11 |
[JPA] 벌크연산 (0) | 2022.03.30 |
[JPA] Spring JPA CascadeType 종류 (0) | 2022.03.28 |
댓글