엔티티가 만들어 질 때 현재 날짜를 디폴트 값으로 하는 방법에 대해 작성한 글입니다.
가령 게시글에 관한 테이블이라고 하면 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 같은 다른 감사 관련 어노테이션을 사용하여 특정 필드에 자동으로 날짜 및 시간을 기록할 수 있습니다.
부족한 글 읽어주셔서 감사합니다.
'Framework > SpringBoot' 카테고리의 다른 글
[Spring] MappedSuperclass 사용하기 (0) | 2024.02.14 |
---|---|
[SpringBoot] 데이터베이스 스키마 자동 생성 옵션에 대해 알아보자 / spring.jpa.hibernate.ddl-auto (0) | 2023.12.26 |
[SpringBoot] 스프링 부트 data.sql이 실행되지 않을 때 (data.sql not working) (0) | 2023.12.24 |
[Spring] Rest Template란? (0) | 2023.09.09 |
[Spring] Spring에서 깃허브 OAuth 로그인하기 (0) | 2023.09.01 |