JPA 고급 매핑 - Mapped Superclass 매핑 정보 상속

2022. 7. 3. 21:26·공부/JPA
반응형

출처 : 자바 ORM 표준 JPA 프로그래밍 인프런 강의

 

JPA 게시글은 대부분 인프런의 김영한님의 강의인 '자바 ORM 표준 JPA 프로그래밍' 기반으로 내용을 정리했습니다.

 

Mapped Superclass 매핑 정보 상속

  • 테이블과 매핑하지 않고 부모 클래스를 상속받는 자식 클래스에게 매핑 정보만 제공한다.
  • 추상 클래스와 비슷하며 @MappedSuperclass는 실제 테이블과 매핑 되지 않는다.

  • 객체에 공통 속성이 존재하는 필드를 객체 입장에서 속성만 상속 받아서 사용하고 싶을 때 사용한다. 물론 DB와는 별개이다.

 

@MappedSuperclass 매핑

BaseEntity.class

@MappedSuperclass
public class BaseEntity {

    private String createdBy;
    private LocalDateTime createdDate;
    private String lastModifiedBy;
    private LocalDateTime lastModifiedDate;
    
    ...getter/setter 생략
}

 

BaseEntity 상속

//Member.class 
@Entity
public class Member  extends BaseEntity{ // BaseEntity 상속

...생략

//Team.class
@Entity
public class Team extends BaseEntity{ // BaseEntity 상속

 

실행 클래스

...생략

Member member = new Member();
member.setUsername("userLee");
member.setCreatedBy("Lee");
member.setCreatedDate(LocalDateTime.now());

em.persist(member);

em.flush();
em.clear();

tx.commit();

...생략



// 출력 로그
Hibernate: 
    
    create table Team (
       TEAM_ID bigint not null,
        createdBy varchar(255),
        createdDate timestamp,
        lastModifiedBy varchar(255),
        lastModifiedDate timestamp,
        name varchar(255),
        primary key (TEAM_ID)
    )
    
    
Hibernate: 
    
    create table Member (
       MEMBER_ID bigint not null,
        createdBy varchar(255),
        createdDate timestamp,
        lastModifiedBy varchar(255),
        lastModifiedDate timestamp,
        USERNAME varchar(255),
        TEAM_ID bigint,
        primary key (MEMBER_ID)
    )

Member와 Team 테이블에 BaseEntity의 필드가 추가되어 생성된 걸 볼 수 있다.

 

  •  @Column
// BaseEntity.class 중 일부
@Column(name = "INSERT_MEMBER")
private String createdBy;



// 출력 로그
Hibernate: 
    
    create table Member (
       MEMBER_ID bigint not null,
        INSERT_MEMBER varchar(255), // 컬럼 이름 변경
        createdDate timestamp,
        lastModifiedBy varchar(255),
        lastModifiedDate timestamp,
        USERNAME varchar(255),
        TEAM_ID bigint,
        primary key (MEMBER_ID)
    )
    
 
 Hibernate: 
    
    create table Team (
       TEAM_ID bigint not null,
        INSERT_MEMBER varchar(255), // 컬럼 이름 변경
        createdDate timestamp,
        lastModifiedBy varchar(255),
        lastModifiedDate timestamp,
        name varchar(255),
        primary key (TEAM_ID)
    )

 

 

@MappedSuperclass 특징

  • 상속 관계 매핑이 되지 않고, 엔티티가 생성되지 않고, 테이블과 매핑하지 않는다. 
  • 부모 클래스를 상속 받는 자식 클래스에 매핑 정보만 제공한다.
  • @MappedSuperclass 애노테이션이 붙은 객체를 이용해 조회, 검색이 불가능하다.
    em.find(BaseEntity) 불가
  • 직접 생성해서 사용할 일이 없으므로 추상 클래스를 권장한다.

 

@Entity 클래스는 엔티티나 @MappedSuperclass로 지정한 클래스만 상속 가능하다.
반응형
저작자표시 비영리 변경금지 (새창열림)
'공부/JPA' 카테고리의 다른 글
  • JPA 프록시와 연관관계 - 즉시 로딩과 지연 로딩
  • JPA 프록시와 연관관계 - 프록시
  • JPA 고급 매핑 - 상속관계 매핑
  • JPA 다양한 연관관계 매핑 - 다대일, 일대다, 일대일, 다대다
데부한
데부한
어차피 할 거면 긍정적으로 하고 싶은 개발자
    반응형
  • 데부한
    동동이개발바닥
    데부한
  • 전체
    오늘
    어제
    • 분류 전체보기 (307)
      • 방통대 컴퓨터과학과 (27)
        • 잡담 (9)
        • 3학년1학기 (17)
      • 프로젝트 및 컨퍼런스 회고 (1)
        • 프로젝트 (4)
        • 한이음 프로젝트 (0)
        • 회고 (3)
      • 공부 (165)
        • Spring (37)
        • JPA (71)
        • 인프런 워밍업 클럽_BE (10)
        • Java (6)
        • React.js (27)
        • 넥사크로 (11)
        • 기타 (3)
      • 알고리즘 (85)
        • 알고리즘 유형 (10)
        • 알고리즘 풀이 (57)
        • SQL 풀이 (18)
      • 에러 해결 (13)
      • 잡담 (7)
        • 국비교육 (2)
        • 구매후기 (5)
        • 진짜 잡담 (0)
  • 블로그 메뉴

    • Github
    • Linkedin
    • 홈
    • 방명록
    • 글쓰기
    • 관리
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    SQL
    개발자
    QueryDSL
    프론트엔드
    react
    springboot
    MSA
    토이프로젝트
    egov
    JPA
    자바스크립트
    에러해결
    IT
    방통대
    전자정부프레임워크
    oracle
    토비의스프링부트
    기출문제
    백준
    프로그래머스
    운영체제
    스프링부트
    SpringBoot를 이용한 RESTful Web Service 개발
    알고리즘
    넥사크로
    인프런
    Spring
    Java
    RESTful
    코딩테스트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
데부한
JPA 고급 매핑 - Mapped Superclass 매핑 정보 상속
상단으로

티스토리툴바