[JPA] @MappedSuperclass란
@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