BACK/SPRING

Spring Boot Project(4) - JPA Auditing으로 생성/수정 시간 자동화

연듀 2023. 1. 24. 20:46

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

 

domain 패키지에 BaseTimeEntity 클래스를 생성한다.

이 클래스는 모든 Entity의 상위 클래스가 되어 Entity들의 createdDate, modifiedDate를 자동으로 관리한다. 

 

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

    @CreatedDate
    @Column(updatable=false)
    private String createdDate;

    @LastModifiedDate
    private String modifiedDate;

    @PrePersist
    public void onPrePersist(){
        this.createdDate = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm"));
        this.modifiedDate = this.createdDate;
    }

    @PreUpdate
    public void onPreUpdate(){
        this.modifiedDate = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm"));
    }
}

 

@MappedSuperclass

JPA Entity 클래스들이 BaseTimeEntity를 상속할 경우 필드들(createdDate, modifiedDate)도 칼럼으로 인식하도록 함

 

@EntityListeners(AuditingEntityListener.class)

BaseTimeEntity 클래스에 Auditing 기능을 포함시킴

 

@CreatedDate

Entity가 생성되어 저장될 때 시간이 자동 저장

 

@LastModifiedDate

조회한 Entity의 값을 변경할 때 시간이 자동 저장

 

@PrePersist로 해당 엔티티를 저장하기 이전에 createdDate를, @PreUpdate로 해당 엔티티를 업데이트 하기 이전에 modifiedDate를 갱신시켰다. 

이 때, String 타입으로 원하는 format을 지정해줬다. 

 

 

 

public class Posts extends BaseTimeEntity {
...
}

이제 이 기능이 필요한 클래스들이 BaseTimeEntity를 상속받게한다.

 

 

@EnableJpaAuditing
@SpringBootApplication
public class ProjectmateApplication {

    public static void main(String[] args) {
        SpringApplication.run(ProjectmateApplication.class, args);
    }
}

 

JPA Auditing 어노테이션들을 모두 활성화할 수 있도록 Application 클래스에 @EnableJpaAuditing 어노테이션을 추가한다.