JPA

@MappedSuperclass

쿠카이든 2022. 6. 13. 11:47
728x90
  • 부모 클래스는 테이블과 매핑하지 않고 부모클래스를 상속 받는 자식 클래스에게 매핑 정보만 제공하고 싶으면 @MappedSuperclass를 사용한다.

@MappedSuperclass 설명 객체

  • 회원(member)과 판매자(seller)는 서로 관계가 없는 테이블과 엔티티이다. 
  • 테이블을 그대로 두고 객체 모델의 id, name 두 공통 속성을 부모 클래스로 모으로 객체 상속 관계로 만들어보자.
@MappedSuperclass
public abstract class BaseEntity {
    
    @Id @GeneratedValue
    private Long Id;
    private String name;
    ...
}

@Entity
public class Member extends BaseEntity {

    //ID 상속
    //NAME 상속
    private String email;
    ...
}

@Entity
public class Seller extends BaseEntity {

    //ID 상속
    //NAME 상속
    private String shopName;
    ...
}
  • 테이블과 매핑되지 않고 자식 클래스에 엔티티의 매핑 정보를 상속하기 위해 사용한다.
  • @MappedSuperclass로 지정한 클래스는 엔티티가 아니므로 em.find()나 JPQL에서 사용할 수 없다.
  • 이 클래스를 직접 생성해서 사용할 일은 거의 없으므로 추상 클래스로 만드는 것을 권장한다.
  • @MappedSuperclass를 사용하면 등록일자, 수정일자, 등록자, 수정자 같은 여러 엔티티에서 공통으로 사용하는 속성을 효과적으로 관리할 수 있다.

 

출처 : JAVA 표준 ORM JPA 프로그래밍 (저자 김영한)

728x90