Framework/SpringBoot

[SpringBoot] created_at 처럼 엔티티 생성할 때 현재 날짜를 디폴트 값으로 지정하기 + 수정일 / Spring Data JPA automatic date creation

  • -
엔티티가 만들어 질 때 현재 날짜를 디폴트 값으로 하는 방법에 대해 작성한 글입니다.

 

가령 게시글에 관한 테이블이라고 하면 created_at처럼 데이터가 추가되는 시점의 날짜를 저장하는 필드가 있을 것입니다.

MySQL에서는 insert 쿼리에서 now() 함수를 쓰거나, 디폴트 값을 주면되는 아주 간단한 문제지만, 스프링에서는 어떻게 검색해야할 지도 잘 모르겠고(본인 얘기1), 내 논리라면 이게 되야 하는데...? 라고 생각하지만 잘 안되는 문제라서(본인 얘기2) 글로 정리하게 되었습니다.

 

 

부디 저만 삽질한 것이 아니길... 😈

 

 

"Spring Data JPA automatic date creation" 이라고 검색하면 스택 오버 플로우에 답변이 몇 개 있긴 하더라고요...

 

 

글은 문제를 해결하는 과정순대로 정리했으니 쭉 따라하시면 됩니다

 

스프링 애플리케이션

맨 먼저 @EnableJpaAuditing 어노테이션을 스프링 애플리케이션 클래스에 추가해주세요.

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@SpringBootApplication
@EnableJpaAuditing
public class TestApplication {

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

}

 

엔티티

그리고 자동 생성 날짜 칼럼이 필요한 엔티티에 @EntityListeners(AuditingEntityListener.class) 어노테이션을 추가해주세요.

 

마지막으로 자동 생성 날짜 칼럼 위에 @CreatedDate 어노테이션을 추가하면 됩니다

이 때 클래스는 LocalDateTime으로 해주셔야 합니다.

 

또 마지막으로 수정한 날짜를 저장할 칼럼 위에 @LastModiedDate 어노테이션을 추가합니다.

import jakarta.persistence.*;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import java.time.LocalDateTime;

@Entity
@EntityListeners(AuditingEntityListener.class)
public class MyEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    // ... 다른 칼럼들
    
    @CreatedDate
    private LocalDateTime createdAt;
    
    @LastModifiedDate
    private LocalDateTime lastModifiedAt;
}

 

 

 

그럼 postman 으로 테스트 했을 때

 

 

 

엔티티가 생성되는 시점의 날짜가 저장되게 됩니다!

 

 

 

 

수정 날짜도 처음 생성된 날짜로 초기화된 후, 업데이트가 되었을 때 시각이 바뀝니다.

 

 


어노테이션 정리

이 방법이 왜 되는 것일까에 대해 알기 위해서는 사용된 어노테이션들을 알아야합니다.

 

 

 

@EnableJpaAuditing

@EnableJpaAuditing 어노테이션은 Spring Data JPA에서 제공하는 기능 중 하나로, JPA 엔티티의 변경 이력을 추적하기 위해 사용됩니다. 이 어노테이션을 사용하면 방금처럼 생성일과 수정일을 자동으로 기록할 수 있습니다.

 

 

 

 

@EntityListeners(AuditingEntityListener.class)

@EntityListeners(AuditingEntityListener.class) 어노테이션은 Spring Date JPA에서 제공하는 감사(Auditing) 기능을 활성화하는 어노테이션입니다. 이 어노테이션을 사용하면 사용한 엔티티의 변경 이력을 추적할 수 있습니다. 따라 특정 필드를 자동으로 갱신할 수 있도록 합니다.

 

구체적으로는 @EntityListeners 어노테이션을 사용하여 AuditingEntityListener 클래스를 지정하면, 해당 엔터티의 저장(create) 수정(update) 시에 자동으로 감사 관련 이벤트가 발생하게 됩니다. 이를 통해 @CreatedDate @LastModifiedDate 같은 다른 감사 관련 어노테이션을 사용하여 특정 필드에 자동으로 날짜 시간을 기록할 있습니다.

 

 

 

 

 


부족한 글 읽어주셔서 감사합니다.

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.