JPA Auditing으로 생성시간/수정시간 자동화하기
JPA Auditing을 사용하는 이유
- 보통 Entity에는 해당 데이터의 생성시간과 수정시간을 포함
- 데이터가 언제 생성/수정 되었는지 등은 차후 유지보수에 있어서 굉장히 중요한 정보이기 때문
- 매번 DB에 삽입/갱신하기 전에 날짜 데이터를 등록/수정 하는 코드가 여기저기 들어가면 귀찮고 코드가 지저분해지기 때문에 JPA Auditing을 사용
LocalDate 사용
- Java8 부터 LocalDate와 LocalDateTime이 등장
- 스프링부트 1.x버전을 쓴다면 별도로 Hibernate 5.2.10버전 이상이 필요
- 스프링부트 2.x버전을 사용하면 별다른 설정 없이 바로 적용됨
Domain 패키지에 BaseTimeEntity 클래스 생성
package com.danny.makewebalone.service.posts;
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 class BaseTimeEntity {
@CreatedDate
private LocalDateTime createdDate;
@LastModifiedDate
private LocalDateTime ModifiedData;
}
@MappedSuperclass
- JPA Entity 클래스들이 BaseTimeEntity를 상속할 경우 필드들(createDate, modifiedDate)도 컬럼으로 인식하게 함
@EntityListeners(AuditingEntityListener.class)
- BaseTimeEntity 클래스에 Auditing 기능을 포함시킴
@CreatedDate
- Entity가 생성되어 저장될 때 시간이 자동 저장됨
@LastModifiedDate
- 조회한 Entity의 값을 변경할 때 시간이 자동 저장됨
Posts클래스가 BaseTimeEntity를 상속받도록 변경
public class Posts extends BaseTimeEntity {
...
}
PostsRepositoryTest클래스에 JPA Auditing 테스트 코드 작성하기
@Test
public void BaseTimeEntity_등록(){
//given
LocalDateTime now = LocalDateTime.of(2022,9,20,0,0,0);
postsRepository.save(Posts.builder()
.title("title")
.content("content")
.author("author")
.build());
//when
List<Posts> postsList = postsRepository.findAll();
//then
Posts posts = postsList.get(0);
System.out.println(">>>>> createDate="+posts.getCreatedDate()+", modifiedData="+posts.getModifiedData());
assertThat(posts.getCreatedDate()).isAfter(now);
assertThat(posts.getModifiedData().isAfter(now));
}
Test 결과
Passed
'스프링 부트와 AWS' 카테고리의 다른 글
04장. 머스테치로 화면 구성하기02 (0) | 2022.11.14 |
---|---|
04장. 머스테치로 화면 구성하기01 (0) | 2022.11.14 |
03장. 스프링 부트에서 JPA로 데이터베이스 다뤄보자05 (0) | 2022.11.14 |
03장. 스프링 부트에서 JPA로 데이터베이스 다뤄보자04 (0) | 2022.11.14 |
03장. 스프링 부트에서 JPA로 데이터베이스 다뤄보자03 (0) | 2022.11.14 |
댓글