Search
〰️

Auditing

JPA 주요 이벤트 어노테이션

@PrePersist
@PostPersist
@PreUpdate
@PostUpdate

스프링 data jpa 사용

설정

@EnableJpaAuditing
@EntityListeners(AuditingEntityListener.class)

사용 어노테이션

@CreatedDate
@LastModifiedDate
@CreatedBy
@LastModifiedBy
@EntityListeners(AuditingEntityListener.class) @Getter @MappedSuperclass public class BaseEntity { @CreatedDate @Column(updatable = false) private LocalDateTime createdDate; @LastModifiedDate private LocalDateTime lastModifiedDate; @CreatedBy @Column(updatable = false) private String createdBy; @LastModifiedBy private String lastModifiedBy; }
Java
복사
등록자, 수정자를 처리해주는 AuditorAware 스프링 빈 등록
실무에서는 세션 정보나, 스프링 시큐리티 로그인 정보에서 ID를 받음
@Bean public AuditorAware<String> auditorProvider() { return () -> Optional.of(UUID.randomUUID().toString()); }
Java
복사
참고
실무에서 대부분의 엔티티는 등록시간, 수정시간이 필요하지만, 등록자, 수정자는 없을 수도 있다.
그래서 다음과 같이 Base 타입을 분리하고, 원하는 타입을 선택해서 상속한다.
public class BaseTimeEntity { @CreatedDate @Column(updatable = false) private LocalDateTime createdDate; @LastModifiedDate private LocalDateTime lastModifiedDate; } public class BaseEntity extends BaseTimeEntity { @CreatedBy @Column(updatable = false) private String createdBy; @LastModifiedBy private String lastModifiedBy; }
Java
복사
저장시점에 저장데이터만 입력하고 싶으면 @EnableJpaAuditing(modifyOnCreate = false) 옵션을 사용하면 된다.