스프링 데이터 JPA 12. Auditing - KwangtaekJung/inflearn-spring-data-jpa-keesun GitHub Wiki
@CreatedDate
private Date created;
@LastModifiedDate
private Date updated;
@CreatedBy
@ManyToOne
private Account createdBy;
@LastModifiedBy
@ManyToOne
private Account updatedBy;엔티티의 변경 시점에 언제, 누가 변경했는지에 대한 정보를 기록하는 기능.
아쉽지만 이 기능은 스프링 부트가 자동 설정 해주지 않습니다.
- 메인 애플리케이션 위에 @EnableJpaAuditing 추가
- 엔티티 클래스 위에 @EntityListeners(AuditingEntityListener.class) 추가
- AuditorAware 구현체 만들기
- @EnableJpaAuditing에 AuditorAware 빈 이름 설정하기.
@SpringBootApplication
@EnableJpaRepositories(
queryLookupStrategy = QueryLookupStrategy.Key.CREATE_IF_NOT_FOUND,
repositoryImplementationPostfix = "Impl")
@EnableJpaAuditing(auditorAwareRef = "accountAuditAware")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}@Service
public class AccountAuditAware implements AuditorAware<Account> {
@Override
public Optional<Account> getCurrentAuditor() {
System.out.println("looking for current user");
// 여기에 user 정보를 담아주는 코드를 추가하면 된다.
// Spring Security를 사용한다면 거기서 현재 user 정보를 읽어올 수도 있다.
return Optional.empty();
}
}Spring Data JPA이 Audit 기능을 이용하지 않고 좀 더 일반적을 방법으로 user 정보를 담는 방법임.
- https://docs.jboss.org/hibernate/orm/4.0/hem/en-US/html/listeners.html
- @PrePersist
- @PreUpdate
- ...