Coding Note
JPA Auditing으로 생성 시간/수정 시간 자동화하기! 본문
유지보수에 있어서 생성, 수정 시간은 중요한 정보가 된다!
JPA Auditing으로 생성 시간/수정 시간 자동화하기!
JPA Auditing
- Spring Data JPA에서 시간에 대해서 자동으로 값을 넣어주는 기능
- 자동으로 시간을 매핑하여 데이터베이스의 테이블에 넣어줌
LocalDate
- java8 이전 시간 출력은 Date/Caledar 클래스를 사용하였으나 다양한 문제들로 인해 LocalDate/LocalDateTime이 등장
1. 생성/수정 시간 추가하기
domain패키지에 클래스를 생성한다.
- BaseTimeEntity
package com.bs.book.springboot.domain.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 modifiedDate;
}
BaseTimeEntity클래스
- 모든 Entity의 상위 클래스가 되어 객체들의 createDate/modifiedDate를 자동으로 관리하는 역할
< 간단하게 코드 정리하기 >
1. @MappedSuperclass
- JPA Entity 클래스들이 BaseTimeEntity을 상속할 경우 필드들도 칼럼으로 인식함.
2. @EntityListeners(AuditingEntityListener.class)
- BaseTimeEntity 클래스에 Auditing 기능을 포함시킴.
이전에 만들었던 Posts 파일에 BaseTimeEntity를 상속받도록 변경한다.
public class Posts extends BaseTimeEntity
JPA Auditing 어노테이션들을 모두 활성화할 수 있도록 이전 Application 클래스에 활성화 어노테이션을 추구한다.
실제 코드는 완성!
테스트 코드를 작성해보자!
2. 테스트 코드
PostsRepositoryTest 클래스에 테스트 메소드를 추가한다.
//생성,수정시간 자동화하기
@Test
public void BaseTimeEntity_등록() {
//given
LocalDateTime now = LocalDateTime.of(2022,3,8,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()+", modifiedDate="+
posts.getModifiedDate());
assertThat(posts.getCreatedDate()).isAfter(now);
assertThat(posts.getModifiedDate()).isAfter(now);
}
< JPA Auditing 테스트 코드 결과>
완성!!
'SpringBoot > AWS_PJ' 카테고리의 다른 글
게시글 등록 화면 구현하기 (0) | 2022.03.09 |
---|---|
머스테치로 화면 구성하기! (0) | 2022.03.09 |
등록,수정, 조회 API 만들기! (0) | 2022.03.08 |
JPA로 데이터베이스 다루기! (0) | 2022.03.08 |
JPA 소개하기 및 데이터 베이스 다루기 (0) | 2022.03.07 |