김영한님의 인프런 강의와 PDF를 바탕으로 정리하였습니다.
https://www.inflearn.com/courses?s=%EA%B9%80%EC%98%81%ED%95%9C
@MappedSuperclass는 공통 매핑 정보가 필요할 때 사용합니다.
물론 아래와 같이 DB에는 따로따로 저장됩니다.
@MappedSuperclass 는
1. 상속관계, 엔티티, 테이블과 매핑되는 것이 아닙니다.
2. 부모 클래스를 상속 받는 자식 클래스에 매핑 정보만 제공 조회, 검색 불가(em.find(BaseEntity) 불가)
3. 직접 생성해서 사용할 일이 없으므로 추상 클래스 권장
코드로 살펴보겠습니다.
만약 필요에 의해 Member, Order 등 등 수많은 테이블에 업데이트한 사람의 정보, 만들어진 날짜, 수정된 날짜, 마지막으로 수정한 사람의 정보 등을 모두 넣어야 한다면 수많은 테이블에 각각의 필드들을 만들어야 할 것 입니다.
하지만 @MappedSuperclass를 사용하면 이러한 반복 작업은 사라집니다.
아래와 같이 BaseEntity를 만들고 @MappedSuperclass어노테이션을 선언합니다.
이제 해당 필드가 필요한 엔티티 클래스들은 이를 상속받으면 됩니다.
Member 엔티티
Order 엔티티
이렇게 하고 아래와 같이 실행해보면.
아래와 같이 create DDL이 날라가는 것을 볼 수 있습니다.
BaseEntity를 상속했다면 위와 같은 필드 컬럼을 알아서 만들어 줍니다.
테이블은 아래와 같아집니다.
@MappedSuperclass를 정리하면 다음과 같습니다.
- 테이블과 관계 없고, 단순히 엔티티가 공통으로 사용하는 매핑 정보를 모으는 역할
- 주로 등록일, 수정일, 등록자, 수정자 같은 전체 엔티티에서 공통 으로 적용하는 정보를 모을 때 사용
- 참고: @Entity 클래스는 엔티티나 @MappedSuperclass로 지정한 클래스만 상속 가능
참고자료: 김영한님 인프런 강의, PDF
'JPA > JPA원리' 카테고리의 다른 글
19. 지연로딩 (0) | 2021.07.16 |
---|---|
18. 프록시 (0) | 2021.07.15 |
16 상속관계 매핑 (0) | 2021.07.14 |
15 더 복잡한 연관관계를 매핑하기 (0) | 2021.07.13 |
14 일대일, 다대다 연관관계 (0) | 2021.07.13 |