2024. 8. 20. 12:42ㆍ스프링
2024/08/20
※ JPA Auditing를 적용해보자.
▶ Timestamped
📌 데이터의 생성(created_at), 수정(modified_at) 시간은 포스팅, 게시글, 댓글 등 다양한 데이터에
자주 활용된다. 따라서, 각각의 Entity의 생성 수정 시간을 매번 작성하는건 너무 비효율적이다.
@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;
}
● Spring Data JPA에서는 시간에 대해서 자동으로 값을 넣어주는 기능인 JPA Auditing을 제공한다.
● @MappedSuperclass
○ JPA Entity 클래스들이 해당 추상 클래스를 상속할 경우 createdAt, modifiedAt 처럼 추상 클래스에
선언한 멤버변수를 컬럼으로 인식할 수 있다.
● @EntityListeners (AuditingEntityListener.class)
○ 해당 클래스에 Auditing 기능을 포함시켜 준다.
● @CreatedDate
○ Entity 객체가 생성되어 저장될 때 시간이 자동으로 저장된다.
○ 최초 생성 시간이 저장되고 그 이후에는 수정되면 안되기 때문에 updatable = false 옵션을 추가한다.
● @LastModifiedDate
○ 조회한 Entity 객체의 값을 변경할 때 변경된 시간이 자동으로 저장된다.
○ 처음 생성 시간이 저장된 이후 변경이 일어날 때마다 해당 변경시간으로 업데이트된다.
● @Temporal
○ 날짜 타입(java.util.Date, java.util.Calendar)을 매핑할 때 사용한다.
○ DB에는 Date(날짜), Time(시간), Timestamp(날짜와 시간)라는 세 가지 타입이 별도로 존재한다.
EX)
▪ DATE : 2024-01-01
▪ TIME : 20:21:14
▪ TIMESTAMP : 2024-01-01 20:21:14.771000
⚠️ @SpringBootApplication 이 있는 class에 @EnableJpaAuditing 추가
✅ JPA Auditing 기능을 사용하겠다는 정보를 전달해주기 위해 @EnableJpaAuditing 을 추가해야 한다.
@EnableJpaAuditing @SpringBootApplication public class MemoApplication
▶ JPA Auditing 적용해보기
1. Timestamped 생성
● entity > Timestamped
package com.sparta.memo.entity;
import jakarta.persistence.*;
import lombok.Getter;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import java.time.LocalDateTime;
@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;
}
2. @EnableJpaAuditing 애너테이션을 추가한다.
3. 적용하고자하는 Entity 클래스에서 Timestamped를 상속받는다.
'스프링' 카테고리의 다른 글
스프링 - 테스트 사용 방법 (0) | 2024.08.22 |
---|---|
스프링 - JPA Query Methods란 무엇일까? (0) | 2024.08.21 |
스프링 - RestTemplate & Open API (0) | 2024.08.19 |
스프링 - RESTful API이란 무엇일까? (0) | 2024.08.16 |
스프링 - Spring Security 프레임워크 (0) | 2024.08.14 |