티스토리 뷰
객체의 입장에서 공통 매핑 정보가 필요할 때 사용한다.
id, name은 객체의 입장에서 볼 때 계속 나온다.
이렇게 공통 매핑 정보가 필요할 때, 부모 클래스에 선언하고 속성만 상속 받아서 사용하고 싶을 때 @MappedSuperclass를 사용한다.
DB 테이블과는 상관없다. 아래에 보면 DB는 매핑 정보 다 따로 쓰고 있다. 객체의 입장이다.
코드로 이해하기
생성자, 생성시간, 수정자, 수정시간을 모든 엔티티에 공통으로 가져가야 하는 상황에서
아래와 같이 BaseEntity를 정의해서 활용할 수 있다.
BaseEntity.java
매핑정보만 상속받는 Superclass라는 의미의 @MappedSuperclass 어노테이션 선언
public abstract class BaseEntity {
private String createdBy;
private LocalDateTime createdDate;
private String lastModifiedBy;
private LocalDateTime lastModifiedDate;
}Member.java, Team.java
BaseEntity 상속
public class Member extends BaseEntity {
...
}
public class Team extends 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
'ICT Eng > JPA' 카테고리의 다른 글
[JPA] 프록시란? (0) | 2019.09.09 |
---|---|
[JPA] 영속성 컨텍스트와 플러시 이해하기 (1) | 2019.08.27 |
[JPA] 상속관계 매핑 전략(@Inheritance, @DiscriminatorColumn) (0) | 2019.08.26 |
[JPA] @ManyToMany, 다대다[N:M] 관계 (6) | 2019.08.23 |
[JPA] @OneToOne, 일대일[1:1] 관계 (0) | 2019.08.23 |
- Total
- Today
- Yesterday
- 순환
- Spring Boot
- RBT
- 레드블랙트리
- Algorithm
- github
- Raspberry Pi
- vuejs
- 스프링부트
- 인프런
- ORM
- IT융합인력양성사업단
- Recursion
- vuex
- 자바
- JPA
- 무선통신소프트웨어연구실
- Wisoft
- Vue.js
- 라즈베리파이
- 젠킨스
- springboot
- 한밭이글스
- Java
- Spring
- 한밭대학교
- AWS
- 정렬
- 시간복잡도
- 알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |