반응형
@MappedSuperclass
- 객체의 입장에서 공통 매핑 정보가 필요할 때 사용한다.
- id, name, created_at, updated_at은 객체의 입장에서 볼 때 계속 나온다.
- 이렇게 공통 매핑 정보가 필요할 때 부모 클래스에 선언하고 속성만 받아서 사용하고 싶을 때 @MappedSuperclass를 사용한다.테이블 구조
-- Member 테이블
create table member(
id bigint,
created_at date,
updated_at date
);
-- Team 테이블
create table team(
team_name varchar(128),
created_at date,
updated_at date
);
코드로 이해하기
- 생성시간, 수정시간을 모든 엔티티에 공통으로 가져가야 하는 상황
- BaseEntity.java
- 매핑정보만 상속받는 Superclass라는 의미의 @MappedSuperclass 어노테이션 선언
@Getter
@Setter
@MappedSuperclass
public abstact class BaseEntity{
private LocalDate createdAt;
private LocalDate update_at;
}
@Entity
public class Member extends BaseEntity{
@Id
private Long id;
}
@Entity
public class Team extends BaseEntity{
@Id
private String teamName;
}
정리
- 상속관계 매핑이 아니다.
- @MappedSuperclass가 선언되어 있는 클래스는 엔티티가 아니다. 당연히 테이블과 매핑도 안된다.
- 단순히 부모 클래스를 상속받는 자식 클래스에 매핑 정보만 제공한다.
- 부모 타입으로 조회, 검색이 불가능하다.
- 직접 생성해서 사용할 일이 없으므로 추상 클래스로 만드는 것을 권장한다.
- 주로 등록일, 수정일 같은 전체 엔티티에서 공통으로 적용하는 정보를 모을 때 사용한다.
- JPA에서 @Entity 클래스는 @Entity나 @MappedSuperclass로 지정한 클래스만 상속할 수 있다.
반응형
'개발 > JPA' 카테고리의 다른 글
[JPA] GeneratedValue (0) | 2023.09.10 |
---|---|
[JPA] Auditing - 공통 도메인 작업 (0) | 2023.09.10 |
[Spring] NativeQuery (0) | 2023.09.10 |
[JPA] Cascade (1) | 2023.09.10 |
[JPA] @OneToMany orphanRemoval (0) | 2023.09.10 |