JPA 기본 | @MappedSuperclass

2024. 7. 10. 21:15· 인프런 김영한 강의 정리/자바 ORM 표준 JPA 프로그래밍 기본편
목차
  1. 1. @MappedSuperclass 언제 사용할까?
  2. 2. 코드 예시
  3. 3. 정리
728x90

1. @MappedSuperclass 언제 사용할까?

여러 엔티티 클래스에서 공통으로 사용되는 필드를 하나의 상위 클래스에 정의하고 이를 상속받아 사용하고자 할 때.

 

만약, 엔티티를 모두 만들었는데 공통적인 필드들을 추가해야 한다면

하나 하나 엔티티마다 이렇게 중복으로 작성을 해줘야한다.

이런 작업을 하지 않도록 도와주는 애노테이션이 바로 @MappedSuperclass다.

private String createdBy;
private LocalDateTime createdDate;
private String lastModifiedBy;
private LocalDateTime lastModifiedDate;
...

 

2. 코드 예시

 

✔️공통 매핑정보를 갖는 상위 클래스(BaseEntity)와 이를 상속받는 Member 클래스

@MappedSuperclass
@Getter
@Setter
public abstract class BaseEntity {

    private String createdBy;
    private LocalDateTime createdDate;
    private String lastModifiedBy;
    private LocalDateTime lastModifiedDate;
}


@Entity
@Getter
@Setter
public class Member extends BaseEntity{

    @Id
    @GeneratedValue
    @Column(name = "MEMBER_ID")
    private Long id;

    @Column(name = "USERNAME")
    private String username;

}

 

공통 필드를 정의할 클래스를 만든다. 여기서는 BaseEntity로 만들었다.

이 클래스에 @MappedSuperclass 애노테이션을 붙여준다.

 

Member 클래스는 BaseEntity를 상속받는다. (매핑 정보를 상속받기 위함)

 

✔️main 메서드

public class JpaMain {

    public static void main(String[] args) {

        EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
        EntityManager em = emf.createEntityManager();

        EntityTransaction tx = em.getTransaction();
        tx.begin();
        try{
            Member member = new Member();
            member.setUsername("userA");
            member.setCreatedBy("ururuwave");
            member.setCreatedDate(LocalDateTime.now());
            em.persist(member);

            em.flush(); //영속성컨텍스트에 있는 것을 DB로!
            em.clear(); //영속성컨텍스트를 날려서 1차캐시에 아무것도 안남긴다!

            tx.commit();
        }catch (Exception e){
            tx.rollback();
        }finally {
            em.close();
        }

    }
}

 

Member 클래스에 필드를 명시해주지 않아도 BaseEntity를 상속받았기 때문에 createdBy, createdDate, lastModifiedBy, lastModifiedDate 필드를 함께 생성하는 쿼리가 실행된다.

create table Member (
        MEMBER_ID bigint not null,
        TEAM_ID bigint,
        createdDate timestamp(6),
        lastModifiedDate timestamp(6),
        USERNAME varchar(255),
        createdBy varchar(255),
        lastModifiedBy varchar(255),
        primary key (MEMBER_ID)
    )

 

✔️데이터 베이스 확인

 

3. 정리

공통된 매핑 정보를 상위 클래스에 정의하고 여러 엔티티에서 이를 재사용함으로써 코드의 중복을 줄이고 일관성을 유지할 수 있다.

 

728x90

'인프런 김영한 강의 정리 > 자바 ORM 표준 JPA 프로그래밍 기본편' 카테고리의 다른 글

JPA 기본 | 즉시 로딩과 지연 로딩  (0) 2024.07.13
JPA 기본 | 프록시 (즉시 로딩, 지연 로딩을 이해하기 위한)  (0) 2024.07.13
JPA 기본 | 상속관계 매핑  (0) 2024.07.10
JPA 기본 | 다양한 연관관계 매핑  (0) 2024.07.05
JPA 기본 | 양방향 연관관계와 연관관계의 주인  (0) 2024.07.02
  1. 1. @MappedSuperclass 언제 사용할까?
  2. 2. 코드 예시
  3. 3. 정리
'인프런 김영한 강의 정리/자바 ORM 표준 JPA 프로그래밍 기본편' 카테고리의 다른 글
  • JPA 기본 | 즉시 로딩과 지연 로딩
  • JPA 기본 | 프록시 (즉시 로딩, 지연 로딩을 이해하기 위한)
  • JPA 기본 | 상속관계 매핑
  • JPA 기본 | 다양한 연관관계 매핑
백엔드 개발자 - 젤리곰
백엔드 개발자 - 젤리곰
오늘도 배움이 있는 하루가 되길 바라는 개발자
백엔드 개발자 - 젤리곰
backend-gummyBear
백엔드 개발자 - 젤리곰
전체
오늘
어제
  • 분류 전체보기 (144)
    • 인프런 김영한 강의 정리 (60)
      • 스프링 핵심원리 기본편 (12)
      • 모든 개발자를 위한 HTTP 웹 기본 지식 (10)
      • 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 (3)
      • 자바 ORM 표준 JPA 프로그래밍 기본편 (28)
      • 실전! Querydsl (6)
    • Spring (2)
    • 프로젝트일지 (6)
    • 프로그래밍 언어 (20)
      • Java (17)
      • JavaScript (3)
      • Python (0)
    • 데이터베이스 (4)
      • Oracle (2)
      • ORM (1)
      • SQL 튜닝 (1)
    • 형상관리 (1)
      • Git (0)
    • 알고리즘&자료구조 (34)
      • Algorithm (31)
      • Data Structure (1)
    • CS지식 (4)
    • Cloud (5)
    • 일기 (7)
      • 공부 일기 (3)
      • 독서 일기 (2)
      • 마음 일기 (2)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • dfs알고리즘
  • 프론트엔드개발자업무
  • 인터페이스
  • #{}와${}의차이
  • 힙자료구조
  • 업캐스팅
  • 객체지향의사실과오해
  • 다운캐스팅
  • 데이터베이스정규화
  • 객체지향방법론
  • SublimeText단축키
  • LeetCode200번
  • 프론트엔드역사
  • ORM프레임워크
  • jquery와javascript
  • 커스텀annotation
  • 인프콘
  • 클라이언트서버통신
  • 스프링컨텍스트
  • LeetCode17번

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
백엔드 개발자 - 젤리곰
JPA 기본 | @MappedSuperclass
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.