DB/JDBC & JPA

[JPA] @CreatedDate와 @LastModifiedDate

Sigfriede 2024. 1. 29. 12:00

  어떤 정보를 관리할 때 데이터의 생성된 날짜와 수정된 날짜를 저장해야되는 경우도 있다. 일일이 저장할 수도 있겠지만, 이 어노테이션을 이용하면 별도의 코드 없이도 자동으로 저장하게 할 수 있다. @CreatedDate는 데이터의 생성일을, @LastModifiedDate는 데이터의 마지막 수정일을 저장한다. 이 어노테이션들은 다음과 같이 사용할 수 있다.

 

import jakarta.persistence.Entity;
import jakarta.persistence.EntityListeners;
import java.time.LocalDateTime;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

@Entity
@EntityListeners(AuditingEntityListener.class)
public class 예시 {

    @CreatedDate
    private LocalDateTime createdAt;

    @LastModifiedDate
    private LocalDateTime modifiedAt;
}

  사용하려는 엔티티 클래스에 @EntityListeners(AuditingEntiryListener.class)를, 생성일과 수정일을 자동으로 저장하고자 하는 컬럼에 어노테이션을 붙이면 된다(이름은 생성일과 수정일이지만 시간까지 저장된다). 또 다음과 같은 별도의 설정이 필요하다.

import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@Configuration
@EnableJpaAuditing
public class JpaAuditingConfiguration {
}
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@EnableJpaAuditing
@SpringBootApplication
public class Application {

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

  둘 다 해야하는 건 아니고, 둘 중 하나 편한 것을 고르면 된다. 만약 이 설정을 빼놓으면 앞선 설정을 인식하지 못하여 값이 저장되지 않는다. 값이 null에서 갱신되지 않는 이유는 이 부분을 빠뜨려서 생긴 버그일 확률이 높다.

'DB > JDBC & JPA' 카테고리의 다른 글

[JPA] Soft Delete와 @SQLDelete  (0) 2024.01.31