0. 개요
- 이번 포스팅에서는 @MappedSuperClass라는 기능에 대해서 알아보자.
1. @MappedSuperClass
- @MappedSuperClass는 공통 매핑 정보를 필요로 할 때 사용하는 기능이다.
- 이는 상속 관계 매핑과 DB와는 별도의 기능으로, 객체의 관점만 집중하는 기능이다.
a) @MappedSuperClass란?
- 모든 Entity에 동일한 필드가 존재하는 경우, 이를 Entity를 정의할 때마다 중복적으로 작성한다.
- 이러한 중복 필드를 공통으로 관리하여 중복적인 작성을 방지하는 기능이다.
b) 예시 코드
- 다음 예시 코드를 통해서 @MappedSuperClass의 역할을 이해해보자.
@Entity
public class A {
@Id @GeneratedValue
private Long id;
private String name;
}
@Entity
public class B {
@Id @GeneratedValue
private Long id;
private String name;
}
- 위의 코드처럼, 모든 Entity가 id와 name이라는 공통 필드를 가진다고 해보자.
- Entity가 100개가 있다면 id와 name이라는 필드를 100번씩 작성해야 한다.
- 이처럼 중복적으로 등장하는 필드를 공통으로 관리하기 위해 @MappedSuperClass를 사용한다.
- 다음 코드를 살펴보자.
@MappedSuperclass
public class BaseEntity {
@Id
@GeneratedValue
private Long id;
private String name;
// Getter & Setter 까지 필수로 입력해야 한다.
// 여기서는 생략하였다.
}
@Entity
public class A extends BaseEntity{}
@Entity
public class B extends BaseEntity{}
- 위의 코드에서 주목해야 하는 부분은 BaseEntity 클래스다.
- 중복적으로 작성되는 필드를 공통 관리하는 클래스를 생성하고, @MappedSuperClass를 명시한다.
- 이처럼 BaseEntity를 상속받는 모든 Entity는 공통 필드를 따로 작성하지 않아도 된다.
* 주의하자!!!
- 공통 필드를 관리하는 BaseEntity 클래스에는 반드시 Getter와 Setter를 포함해야 한다.
- 위의 예시 코드에서는 가독성을 위해 생략하였다.
c) 예시 코드 실행
- 다음 코드를 이용하여 위의 예시 코드를 테이블로 생성해보자.
- 위의 코드를 보면 Getter & Setter까지 공통 필드로 관리되는 것을 확인할 수 있다.
- 이를 실행하면 다음과 같은 DDL 쿼리가 생성되는 것을 확인할 수 있다.
- 위의 사진에서 확인할 수 있듯이, 공통 필드인 id와 name이 테이블에 자동으로 생성되었다.
- 그렇다면 DB에는 올바르게 값이 들어갔을까? 다음 사진을 살펴보자.
- 위의 사진처럼 DB에 올바르게 값이 생성된 것을 확인할 수 있다.
d) 정리 및 결론
- @MappedSuperClass는 Entity에 중복 등장하는 필드를 공통으로 관리하는 기능이다.
- @MappedSuperClass는 상속 관계 매핑도 아니고 테이블 매핑도 아니다.
- 상속 관계 매핑이 아니므로 BaseEntity(상위 타입)를 이용한 조회는 불가능하다.
- DB와는 별개로 오직 객체 중점적으로 동작하는 기능이다.
- BaseEntity를 인스턴스로 생성하여 사용할 일이 없으므로 추상 클래스(abstract)로 선언할 것을 권장한다.
* 헷갈리지 말자!!!
- @Entity가 선언된 클래스를 상속(extends) 받으면 상속 관계 매핑이 된다.
- @Entity 없이, @MappedSuperClass가 선언된 추상 클래스를 상속(extends) 받으면 공통 속성 매핑이다.
'Back-end > JPA 개념' 카테고리의 다른 글
15. 지연 로딩 & 즉시 로딩(N + 1 문제) (0) | 2022.04.11 |
---|---|
14. 프록시(Proxy) (0) | 2022.04.08 |
12. 상속 관계 매핑 (0) | 2022.04.06 |
11. 연관 관계의 종류(일대일, 다대다) (0) | 2022.04.05 |
10. 연관 관계의 종류(일대다, 다대일) (0) | 2022.04.04 |
댓글