@MappedSuperclass

도윤·2024년 3월 5일

@MapperSuperclass

  • 객체의 입장에서 공통 매핑 정보가 필요할때 사용한다.
  • id, name 은 객체의 입장에서 볼 때 계속 나온다.
  • 이렇게 공통 매핑 정보가 필요할 때, 부모 클래스에 선언하고 속성만 상속 받아서 사용하고 싶을때 @MapperSuperclass 를 사용한다.
  • DB 테이블 하고는 상관이 없다. 아래에 보면 DB 매핑 정보를 다 따로 사용하고 있다.

코드로 이해를 해보자

  • 생성자, 생성시간, 수정자, 수정시간을 모든 엔티티에 공통으로 가져가야 하는 상황에서
  • 아래와 같이 BaseEntity 를 정의해서 활용할 수 있다.
  • BaseEntity
    • 매핑 정보만 상속받는 Superclass 라는 의미의 @MapperSuperclass 어노테이션 선언

Member , Team

  • BaseEntity 상속


쿼리문 결과


정리

  • 상속관계 매핑이 아니다.

  • @MapperSuperclass 가 선언되어 있는 클래스는 엔티티가 아니다. 당연히 테이블과 매핑도 안된다.

  • 단순히 부모 클래스를 상속 받는 자식 클래스에 매핑 정보만 제공한다.

  • 조회, 검색이 불가하다.(em.find(BaseEntity) ) 불가능.

    • 부모 타입으로 조회 하는 것이 불가능
      - 직접 생성해서 사용할 일이 없기 때문에 추상 클래스로 만드는 것을 권장
  • 테이블과 관계가 없고, 단순히 엔티티가 공통으로 서용하는 매핑 정보를 모으는 역할을 한다.

  • 주로 등록일, 수정일, 등록자, 수정자 같은 전체 엔티티에서 공통적으로 적용하는 정보를 모을때 사용한다.

  • @Entity 는 상속관계 매핑, @Mappersuperclass 는 속성만 상속 받을때 사용한다.

  • JPA 에서 @Entity 클래스는 @Entity 나 @MapperSuperclass 로 지정한 클래스만 상속할 수 있다.

Reference

자바 ORM 표준 JPA 프로그래밍

profile
기록은 기억을 이긴다⭐

0개의 댓글