본문 바로가기
백엔드/JPA

스프링 데이터 jpa Auditing

by 김어찐 2021. 10. 23.
728x90

BaseEntity 생성

package com.study.datajpa.entity;

import lombok.Getter;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
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;

@EntityListeners(AuditingEntityListener.class)
@MappedSuperclass
@Getter
public class BaseEntity {

    @CreatedDate
    @Column(updatable = false)
    private LocalDateTime createDate;

    @LastModifiedDate
    private LocalDateTime lastModifiedDate;

    @CreatedBy
    @Column(updatable = false)
    private String createBy;

    @LastModifiedBy
    private String lastModifiedBy;
}

Application 메인메소드에 @EnableJpaAuditing 등록후 AuditorAware<> 빈 등록

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.data.domain.AuditorAware;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

import java.util.Optional;
import java.util.UUID;

@SpringBootApplication
@EnableJpaAuditing
public class DataJpaApplication {

	public static void main(String[] args) {
		SpringApplication.run(DataJpaApplication.class, args);
	}


	@Bean
	// 등록되거나 수정될때마다다	auditorProvider 함수 실행 @CreateBy 및 @LastModifiedBy 어노테이션 붙은 속성에 적용
	AuditorAware<String> auditorProvider() {
    	// 현재 테스트 코드기때문 UUID 넣은것이고 실제로는 세션에서등에서 수정자 삽입
		return () -> Optional.of(UUID.randomUUID().toString());
		//람다식 일반 코드로 변환
//		@Override
//		public Optional<String> getCurrentAuditor() {
//			return Optional.of(UUID.randomUUID().toString());
//		}
	}
}
728x90