less than 1 minute read

@MappedSuperclassPermalink

  • __객체 입장__에서 공통 매핑 정보가 필요할 떄 사용
  • workTime, workUser 등 객체의 입장에서 볼때 항상 등장하는 속성들이 있다.
  • 이렇게 공통 매핑 정보가 필요할 때, 부모 클래스에 선언하고 속성만 상속 받아서 사용하고 싶을 때 @MapperdSuperclass를 사용한다.
  • DB 테이블과는 상관없이 다 따로 사용하고, 객체의 입장에서 사용된다.

예시Permalink

  • 생성자, 생성시간등 모든 엔티티에서 공통속성을 가지고 있을때
  • 아래와 같이 BaseEntity를 정의해서 활용한다.

BaseEntity.javaPermalink

  • 매핑정보만 상속받는 Superclass 라는 의미의 @MappedSuperclass 어노테이션을 선언한다.
    @Getter
    @Setter
    @MappedSuperclass
    public abstract class BaseEntity {
      private Long workUser;
      private LocalDateTime workTime;
    }
    

Member.java, Team.javaPermalink

  • BaseEntity 상속 ```java @Entity public class Member extends BaseEntity {

}

public class Team extends BaseEntity {

} ```

정리Permalink

  • @MappedSuperclass 는 상속 관계 매핑이 아니다.
  • @MappedSuperclass가 선언되어 있는 클래스(BaseEntity)는 엔티티가 아니다, 테이블간의 매핑이 안된다.
  • 조회 검색이 불가능하다. 부모 타입으로 조회하는 것이 불가능 하다.
  • 단순히 부모 클래스를 상속 받는 자식 클래스에 매핑 정보만 제공한다.
  • 직접 생성해서 사용할 일이 없으므로 추상 클래스로 만들어 사용한다.
  • 테이블과 관계가 없고, 단순히 엔티티가 공통으로 사용하는 매핑 정보를 모으는 역할을 한다.
  • 참고
    • JPA 에서 @Entity 클래스는 @Entity나 @MappedSuperclass로 지정한 클래스만 상속이 가능하다.

내용Permalink

https://ict-nroo.tistory.com/129?category=826875

Categories:

Updated: