JAVA

[JAVA] @MappedSuperclass

응디 2022. 1. 4. 13:47

공통 매핑 정보가 필요할 때 사용한다.( id, name 과 같은 )

: DB 에서는 다른 컬럼이지만 객체에서 반복적으로 사용될때 ( 귀찮음을 줄이기 위한 것 )

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

 

예시 ) 만약 Member와 Team 테이블에 생성한 사람, 생성날짜, 수정한 사람 , 수정 날짜 를 공통적으로 사용하고 싶다면?

1. BaseEntity 생성

package hellojpa;

import javax.persistence.MappedSuperclass;
import java.time.LocalDateTime;

@Getter
@MappedSuperclass
public abstract class BaseEntity {
    private String createdBy;
    private LocalDateTime createdDate;
    private String modifiedBy;
    private LocalDateTime lasModifiedDate;

}

 

2. BaseEntity를 extends 해준다.( 그럼 Member나 Team에서 createdBy 등을 명시하지않아도 사용 가능 )

/* Member.java */
@Entity
public class Member extends BaseEntity{
...
}

/* Team.java */
@Entity
public class Team extends BaseEntity{
...
}

 

결과

Member member = new Member();
member.setUsername("ej");
member.setCreatedBy("Park");
member.setCreatedDate(LocalDateTime.now());

em.persist(member);

결과 DB 예시

  • 테이블과 관계 없고 , 단순히 엔티티가 공통으로 사용하는 매핑 정보를 모으는 역할
  • 주로 등록일, 수정일, 등록자, 수정자 같은 전체 엔티티에서 공통으로 적용하는 정보를 모을 때 사용

 

@Entity 클래스는 엔티티나 @MappedSuperclass로 지정한 클래스만 상속 가능

'JAVA' 카테고리의 다른 글

[JAVA] 즉시로딩과 지연로딩  (0) 2022.01.05
[JAVA] 프록시  (0) 2022.01.04
[JAVA] JPA 고급 매핑 (상속 관계 매핑)  (0) 2021.12.16
[JAVA] JPA 다양한 연관관계 매핑  (0) 2021.12.09
[JAVA] JPA 연관관계 매핑( 양방향 )  (0) 2021.11.17