-
JPA Auditing카테고리 없음 2024. 6. 27. 12:28
JPA Auditing
- JPA를 사용하는 애플리케이션에서 entity 클래스의 생성 및 수정 시점에 대한 자동 기록 기능을 제공하는 방법
- 이를 통해 데이터베이스에 저장된 entity 객체의 생성 시간, 마지막 수정 시간, 생성자, 수정자 등을 자동으로 기록할 수 있음
- 자동으로 데이터 변경 이력을 관리할 수 있어 편리함
JPA Annotation
@MappedSuperclass
- 공통 필드나 매핑 정보를 여러 엔티티에서 공유할 수 있도록 하기 위해 사용되는 어노테이션
- @MappedSuperclass가 선언된 클래스는 실제 엔티티가 아니며 데이터베이스 테이블과 직접적으로 매핑되지 않음
- 대신 이 클래스를 상속받는 엔티티 클래스에 매핑 정보가 전달됨
- 여러 엔티티에 공통적으로 적용되는 필드 (ex. 생성 시간, 수정 시간)를 정의할 때 사용됨
- 예시 코드
import lombok.Getter; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; import javax.persistence.Column; import javax.persistence.EntityListeners; import javax.persistence.MappedSuperclass; import java.time.LocalDateTime; @Getter @MappedSuperclass @EntityListeners(AuditingEntityListener.class) public class BaseTimeEntity { @CreatedDate @Column(updatable = false) private LocalDateTime createdDate; @LastModifiedDate private LocalDateTime modifiedDate; }
@EntityListeners
- 해당 클래스에 auditing 기능을 포함
- 엔티티의 라이프사이클 이벤트(ex. 엔티티 생성/업데이트)를 리스닝하는 리스너 클래스를 지정하는 어노테이션
- 엔티티에 대한 라이프사이클 이벤트를 처리하여 특정 로직을 실행하거나 데이터를 자동으로 설정할 때 사용
- 엔티티의 변화를 감지하고 데이블의 데이터를 조작함
@CreatedDate
- 엔티티가 처음 생성될 때의 날짜와 시간을 자동으로 설정하는 어노테이션
- @CreatedDate가 적용된 필드는 엔티티가 처음 저장될 때 자동으로 현재 날짜와 시간으로 설정됨
@LastModifiedDate
- 엔티티가 마지막으로 수정될 때의 날짜와 시간을 자동으로 설정하는 어노테이션
- @LastModifiedDate가 적용된 필드는 엔티티가 저장될 때마다 자동으로 현재 날짜와 시간으로 업데이트됨