[Spring Boot] aLog Project - 등록/수정/조회 API 구현 에 이어서 JPA Auditing으로 생성시간/수정시간 자동화를 구현합니다. 🏆
보통 Entity
에는 해당 데이터의 생성시간과 수정시간을 포함합니다.
언제 만들어졌는지, 언제 수정되었는지 등은 차후 유지보수에 있어 굉장히 중요한 정보이기 때문입니다. 따라서 JPA Auditing을 사용합니다.
domain
패키지에 BaseTimeEntity 클래스를 만듭니다.
package com.aLog.domain;
import lombok.Getter;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.EntityListeners;
import javax.persistence.MappedSuperclass;
import java.time.LocalDateTime;
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseTimeEntity {
@CreatedDate
private LocalDateTime createdDate;
@LastModifiedDate
private LocalDateTime modifiedDate;
}
📁 코드 설명
1. @MappedSuperclass
- JPA Entity 클래스들이 BaseTimeEntity를 상속할 경우 필드들도 칼럼으로 인식하도록 합니다.
2. @EntityListeners(AuditingEntityListener.class)
- BaseTimeEntity 클래스에 Auditing 기능을 포함시킵니다.
3. @CreatedDate
- Entity가 생성되어 저장될 대 시간이 자동 저장됩니다.
4. @LastModifiedDate
- 조회한 Entity의 값을 변경할 대 시간이 자동 저장됩니다.
Posts 클래스가 BaseTimeEntity를 상속받도록 변경합니다.
...
public class Posts extends BaseTimeEntity {
...
JPA Auditing 어노테이션을 모두 활성화할 수 있도록 ALogApplication 클래스에 활성화 어노테이션 하나를 추가합니다.
package com.aLog;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
@EnableJpaAuditing // JPA Auditing 활성화
@SpringBootApplication
public class ALogApplication {
public static void main(String[] args) {
SpringApplication.run(ALogApplication.class, args);
}
}
PostsRepositoryTest 클래스에 테스트 메소드를 추가합니다.
...
@Test
public void BaseTimeEntity_등록() {
LocalDateTime now = LocalDateTime.of(2023,9,5,0,0,0);
postsRepository.save(Posts.builder()
.title("title")
.content("content")
.author("author")
.build());
List<Posts> postsList = postsRepository.findAll();
Posts posts = postsList.get(0);
System.out.println(">>>>>>>>>> createDate = "+posts.getCreatedDate()+", modifiedDate = "+posts.getModifiedDate());
assertThat(posts.getCreatedDate()).isAfter(now);
assertThat(posts.getModifiedDate()).isAfter(now);
}
}
📁 코드 설명
1. LocalDateTime now = LocalDateTime.of(2023,9,5,0,0,0);
- 현재 날짜와 시간을 나타내는 LocalDateTime 객체를 생성합니다. 여기서는 2023년 9월 5일 00:00:00으로 설정되었습니다.
2. assertThat(posts.getCreatedDate()).isAfter(now)
- posts의 생성일자가 now보다 이후인지 검사합니다.
3. assertThat(posts.getModifiedDate()).isAfter(now)
- posts의 수정일자가 now보다 이후인지 검사합니다.
✔ JPA Auditing을 이용하여 등록/수정 시간을 자동화하는 방법을 알아봤습니다.