JAVA

[JAVA] Auditing

응디 2022. 2. 24. 17:24

엔티티를 생성, 변경할 때 변경한 사람과 시간을 추적하고 싶으면?

 

등록일/수정일 , 등록자/수정자를 등록시켜주자!

  1. MainApplication에 @EnableJpaAuditing Annotation 추가 한다.
  2. BaseEntity에 @EntityListeners(AuditingEntityListener.class) 추가

아래와 같이 작성 가능하다.

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

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

    @LastModifiedDate
    private LocalDateTime lastModifiedDate;

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

    @LastModifiedDate
    private String lastModifiedBy;
}

 

이때 시간은 LocalDateTime은 now로 자동으로 삽입이 가능하지만 등록자/수정자는 자동으로 어떻게 삽입될까??

→ AuditorAware 이용!

MainApplication.java에 아래 Bean 주입

// 작성자나 수정자를 자동으로 등록한다.
	@Bean
	public AuditorAware<String> auditorProvider(){
		// 만약 springsecurity 사용시에는 session이나 저장된 곳에서 유저정보를 가져와야함
		return () -> Optional.of(UUID.randomUUID().toString());
		// 람다를 안쓰면 아래 처럼 작성한다.(인터페이스에서 메소드 하나면 람다로 변경 가능)
		/*return new AuditorAware<String>() {
			@Override
			public Optional<String> getCurrentAuditor() {
				return Optional.of(UUID.randomUUID().toString());
			}
		}*/
	}

 

만약 등록자/수정자는 필요없고 등록일/수정일 데이터만 필요하다면?

등록일/수정일은 BaseTimeEntity로 최상위에 두고

등록자/수정자는 BaseTimeEntity를 상속받는 BaseEntity로 만든다

따라서 시간 관련만 필요한 사람들은 BaseTimeEntity를 사용하고, 등록자/수정자까지 필요한사람은 BaseEntity를 사용하도록 한다.

 

BaseTimeEntity.java

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

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

    @LastModifiedDate
    private LocalDateTime lastModifiedDate;
}

 

BaseEntity.java

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

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

    @LastModifiedDate
    private String lastModifiedBy;
}

'JAVA' 카테고리의 다른 글

[JAVA] Querydsl 설정  (0) 2022.03.03
[JAVA] web 확장 - 페이징과 정렬  (0) 2022.03.03
[JAVA] 벌크성 수정 쿼리와 @EntityGraph  (0) 2022.02.23
[JAVA] Spring data JPA 페이징과 정렬  (1) 2022.02.17
[JAVA] return type(Optional)  (0) 2022.02.16