@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
@Getter
public abstract class AuditableEntity {
@CreatedDate
@Column(updatable = false, nullable = false)
protected LocalDateTime createdAt;
@LastModifiedDate
@Column(insertable = false)
protected LocalDateTime lastModifiedAt;
@CreatedBy
@Column(updatable = false, nullable = false)
protected String createdBy;
@LastModifiedBy
@Column(insertable = false)
protected String lastModifiedBy;
}
@EnableJpaAuditing
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
@EnableJpaAuditin 어노테이션은 Spring Data JPA의 감사 기능을 활성화 한다.
JPA 감사는 엔티티의 생성 및 수정을 자동으로 추적함
@Component
public class AuditorAwareImpl implements AuditorAware<String> {
@Override
public Optional<String> getCurrentAuditor(){
return Optional.ofNullable(SecurityContextHolder
.getContext()
.getAuthentication()
.getName()
);
}
}
@CreateBy와 @LastModifiedBy는 AuditorAware<T> 를 구현하여야 저장이 가능하다.
AuditorAware를 구현해주고 SecurityContextHolder를 사용하여 현재 사용자 정보를 가져올 수 있다.
회원가입을 할 경우 CreateBy는 anonymousUser로 저장된다.
'PROJECT > J-PLAN' 카테고리의 다른 글
제네릭 관련 코드 수정 피드백 (0) | 2025.01.18 |
---|---|
ResponseEntity와 Header (공통 응답 방식)의 차이 (0) | 2025.01.10 |
[데이터베이스 설계] (0) | 2025.01.08 |