[SpringBoot] 생성시간/수정시간 칼럼 자동화

nayoon·2021년 1월 2일
0

Spring

목록 보기
2/4

"스프링 부트와 AWS로 혼자 구현하는 웹 서비스"의 3장 '스프링 부트에서 JPA로 데이터베이스 다뤄보자'를 공부하던 중 맨 마지막 부분의 "JPA Auditing으로 생성시간/수정시간 자동화하기"는 잘 알아두는 것이 좋을 것 같아서 글을 작성하게 되었다.

엔티티에는 해당 데이터의 생성시간과 수정시간을 포함한다.
(언제 만들어졌는지, 언제 수정되었는지는 차후 유지보수에 있어 굉장히 중요한 정보이기 때문)

하지만 매번 DB에 삽입, 갱신 전 날짜 데이터를 등록/수정하는 코드가 들어가게 되면 귀찮고 지저분해지기 때문에 이 문제를 해결하고자 JPA Auditing 을 사용한다.

domain 패키지에 BaseTimeEntity 클래스를 생성한다.
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.MappedSuperclass;
import javax.persistence.EntityListeners;
import java.time.LocalDateTime;

@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseTimeEntity {

    @CreatedDate
    private LocalDateTime createdDate;

    @LastModifiedDate
    private LocalDateTime modifiedDate;
}
BaseTimeEntity 클래스는 모든 Entity의 상위 클래스가 되어 Entity들의 createdDate, modifiedDate를 자동으로 관리하는 역할을 한다.
  1. @MappedSuperclass
  • JPA Entity 클래스들이 BaseTimeEntity을 상속할 경우 필드들(createdDate, modifiedDate)도 칼럼으로 인식하도록 한다.
  1. @EntityListeners(AuditingEntityListener.class)
  • BaseTimeEntity 클래스에 Auditing 기능을 포함시킨다.
  1. @CreatedDate
  • Entity가 생성되어 저장될 때 시간이 자동 저장된다.
  1. @LastModifiedDate
  • 조회한 Entity의 값을 변경할 때 시간이 자동 저장된다.
Entity 클래스가 BaseTimeEntity를 상속받도록 변경한다.
public class Posts extends BaseTimeEntity {
	...
}
JPA Auditing 어노테이션들을 모두 활성화할 수 있도록 Application 클래스에 활성화 어노테이션 하나를 추가한다.
@EnableJpaAuditing // JPA Auditing 활성화
@SpringBootApplication
public class Application {
	
    public static void main(String[] args) {
    	SpringApplication.run(Application.class, args);
    }
}

출처: 스프링 부트와 AWS로 혼자 구현하는 웹 서비스

profile
뚜벅뚜벅 열심히 공부하는 개발자

0개의 댓글