Coding Note

JPA Auditing으로 생성 시간/수정 시간 자동화하기! 본문

SpringBoot/AWS_PJ

JPA Auditing으로 생성 시간/수정 시간 자동화하기!

jinnkim 2022. 3. 8. 23:47

 

 

유지보수에 있어서 생성, 수정 시간은 중요한 정보가 된다!

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 테스트 코드 결과>

 

 

 

완성!!

Comments