코딩과 결혼합니다

230709 - Spring @EntityListeners(AuditingEntityListener.class) 본문

2세/Spring

230709 - Spring @EntityListeners(AuditingEntityListener.class)

코딩러버 2023. 7. 10. 10:52
728x90
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class Timestamped {

    @CreatedDate
    @Column(updatable = false)
    @Temporal(TemporalType.TIMESTAMP)
    private LocalDateTime createdAt;

    @LastModifiedDate
    @Column
    @Temporal(TemporalType.TIMESTAMP)
    private LocalDateTime modifiedAt;
}
서비스를 운영할 때 사용자의 기본적인 로그를 DB에 남겨야 할 때가 있다.
마지막 로그인, 엔티티 생성 시간, 변경된 시간, 변경된 사람 등이 그 예시인데,
어떠한 엔티티안에 각각의 생성 시간을 추가해야 한다고 가정해보자.
이럴 경우에는 모든 엔티티가 LocalDateTIme createdAt, String createdBy에 대한 연산을 수행해야 한다.

➡️ 모드 엔티티가 동일한 연산을 수행해야 한다면 연산을 처리 하는 기본 엔티티를 만들고 모든 데이터 요청시에 엔티티가 업데이트 된다면 더 수월하게 처리 할 수 있지 않을까?

생성일/수정일/생성자 등을 자동화 할 때 사용하는게 바로 JPA Auditing 이다.

@EntityListeners

엔티티를 DB에 적용하기 전, 이후에 커스텀 콜백을 요청할 수 있는 어노테이션이다.

@EntityListeners 의 인자로 커스텀 콜백을 요청할 클래스를 지정해주면 되는데, Auditing을 수행할 때는 JPA에서 제공하는 AuditingEntityListener.class 를 인자로 넘기면 된다.

 

 

AuditingEntityListener을 사용하기 위해선 어플리케이션 구동 클래스에  @EnableJpaAuditing을 달아줘야 한다 . 

이거 안해서 계속 왜 createdAt 값에 null만 나오나~~~ 싶었다.