개발 도서 읽기/자바 ORM 표준 JPA 프로그래밍

[7장] 7.2 @MappedSuperclass

nnhhmm 2024. 11. 19. 17:13

@MappedSuperclass

부모 클래스는 테이블과 매핑하지 않고 부모클래스를 상속받는 자식 클래스에 매핑 정보만 제공하고 싶을 때 사용

 

@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{

	// 상속
    // NAME 상속
    private String shopName;
    ...
}

 

BaseEntity에는 객체들이 주로 사용하는 공통 매핑정보를 정의했다. 

자식 엔티티들은 상속을 통해 BaseEntity의 매핑 정보를 물려받았다. 

 

부모로부터 물려받은 매핑 정보를 재정의하려면 @AttributeOverrids나 @AttributeOveride를 사용하고,

연관관계를 재정의하려면 @AssociationOverrides나 @AssociationOverride를 사용한다.

@Entity
@AttributeOverride(name="id", column= @Colum(name = "MEMBER_ID"))
public class Member extends BaseEntity {...}
@Entity
@AttributeOverrides({
	@AttributeOverride (name = "id", column =@Column(name = "MEMBER_ID")),
    @AttributeOverride (name = "name", column = @Column( name = "MEMBER_NAME"))
})
public class Member extends BaseEntity{...}

 

@MappedSuperclass 의 특징

  • 테이블과 매핑되지 않고 자식 클래스에 엔티티의 매핑 정보를 상속하기 위해 사용
  • @MappedSuperclass로 지정한 클래스는 엔티티가 아니므로 em.find() 나 JPQ에서 사용할 수 없다.
  • 이 클래스를 직접 생성해서 사용할 일은 거의 없으므로 추상 클래스로 만드는 것을 권장한다.