JPA

[JPA 17] 공통 컬럼 관리 - @MappedSuperClass

snowkit 2022. 3. 11. 10:12

@MappedSuperClass

@MappedSuperClass
public abstract class CommonEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private LocalDateTime createdAt;
    private LocalDateTime updatedAt;
}
  • id, 등록일, 수정일, 등록한 사람, 수정한 사람 등 많은 Entity에서 공통으로 사용하는 컬럼을 모아놓은 클래스
  • @MappedSuperClass 클래스를 @Entity 클래스가 상속 받으면 테이블에 컬럼이 추가된다
    • JPA의 @Entity 클래스는 @Entity 클래스와 @MappedSuperClass 클래스만 상속 받을 수 있다
    • DB에서는 테이블 상속 관계를 구현하지 않으며, 테이블에 컬럼만 추가한다
  • @Entity 아님(테이블 생성하지 않음)
  • Java에서 직접 사용할 일이 없으므로 추상 클래스로 사용하는 것을 권장한다

상속 예시

@Entity
public class Member extends CommonEntity {
    private String name;
    private String phone;
}

SQL 결과

create table Member (
    id bigint generated by default as identity,
    createdAt timestamp,
    updatedAt timestamp,
    name varchar(255),
    phone varchar(255),
    primary key (id)
)