Programing/JPA

@MappedSuperclass 에 대해서 알아보자

리커니 2023. 8. 25. 10:01
반응형

@MappedSuperclass는 명칭과 같이 상속관계에서 부모 클래스를 매핑 할 때 사용합니다.

기존의 상속관계 매핑에서는 부모 자식 테이블 모두 엔티티로 생성하여 매핑을 하지만, @MappedSuperclass는 부모 클래스는 엔티티로 생성하지 않고 자식 클래스만 엔티티로 생성합니다.

이는 단순히 매핑 정보(엔티티 컬럼)를 상속할 목적으로 사용 됩니다.

 

예제)

예를들어 위와 같이 MANAGER, EMPLOYEE 테이블이 있다고 할 때, 두 테이블에는 ID와 NAME이 공통으로 있는 것을 보실 수 있습니다. 이 두 컬럼을 부모클래스로 생성해 위의 두 테이블의 엔티티가 상속받도록 합니다.

 

@MappedSuperclass
public abstract class CommonEntity {

    @Id
    @Column(name = "id")
    private Long id;
    
    @Column(name = "NAME")
    private String name;
    ...
}
@Entity
public class Manager extends CommonEntity {

	@Column(name = "EMAIL")
	private String email;
    ...
}
@Entity
public class Employee extends CommonEntity {

	@Column(name = "TEL_NO")
	private String telNo;
    ...
}

CommonEntity의 경우 new를 사용해 직접 생성할 일이 없으므로 abstract class 로 생성합니다.

 

@MappedSuperclass 로 설정한 클래스는 엔티티가 아니기 때문에 find() 나 JPQL 에서 사용할 수 없습니다. 위에서 말씀드린데로, 단순하게 공통으로 사용하는 매핑 정보를 모아놓는 역할을 할 뿐입니다.

모든 테이블에서 공통적으로 사용되는 등록일자, 수정일자 등을 선언해 사용할 수 있지만, 검색이 불가하기 때문에 활용도는 그다지 높지 않을 것으로 판단됩니다.

 

모든 엔티티에 공통적으로 사용되지만, 검색 할 일이 없는 컬럼의 경우 @MappedSuperclass를 사용하여 관리하시면 됩니다.

 

참고로 엔티티는 @MappedSuperclass와 @Entity로 설정한 클래스만 상속을 받을 수 있습니다.

 

반응형