본문 바로가기
JPA

JPA - @MappedSuperclass

by 왈레 2022. 4. 10.

@MappedSuperclass

 

코드예제

@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseTimeEntity{

    @CreatedDate // Entity가 생성되어 저장될 때 시간이 자동 저장됩니다.
    private LocalDateTime createDate;
    
    @LastModifiedDate // 조회한 Entity 값을 변경할 때 시간이 자동 저장됩니다.
    private LocalDateTime modifiedDate;
}

@Entity
public class Member extends BaseEntity{
    ...
}

// JPA Auditing 활성화
@EnableJpaAuditing 
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

 

 

JPA Auditing이란?

JPA에서는 Audit이라는 기능을 제공하고 있습니다.

Audit은 감시하다, 감사하다라는 뜻으로 Spring Data JPA에서 시간에 대해서 자동으로 값을 넣어주는 기능입니다.

도메인을 영속성 컨텍스트에 저장하거나 조회를 수행한 후에 update를 하는 경우 매번 시간 데이터를 입력하여

주어야 하는데, audit을 이용하면 자동으로 시간을 매핑하여 데이터베이스의 테이블에 넣어주게 됩니다.

 

 

Member 테이블에 자동적으로 CreateData, ModifiedDate 컬럼이 생성된 것을 확인할 수 있다.

 

 

• @MappedSuperclass는 상속관계 매핑이 아니다.

• @MappedSuperclass가 달린 클래스는 엔티티가 아니다. 따라서 테이블과 매핑되지 않는다.

• 부모 클래스를 상속 받는 자식 클래스에 매핑 정보만 제공한다.

• 조회, 검색 불가 em.find(BaseEntity) 불가

• 직접 생성해서 사용할 일이 없으므로 추상 클래스 권장

 

• 테이블과 관계 없고, 단순히 엔티티가 공통으로 사용하는 매핑 정보를 모으는 역할뿐이다.

• 주로 등록일, 수정일, 등록자, 수정자 같은 전체 엔티티에서 공통 으로 적용하는 정보를 모을 때 사용

• 참고: @Entity 클래스는 엔티티나 @MappedSuperclass로 지정한 클래스만 상속 가능

 

※출처 - 인프런 김영한 JPA

댓글