본문 바로가기
Spring

JPA Auditing 을 이용한 생성 시간과 수정 시간 자동화하기

by devLog by Ronnie's 2021. 10. 8.

JPA Auditing 을 이용한 생성 시간과 수정 시간 자동화하기

 

스케줄 기능을 이용하여 전날에 문의 들어온 문의 개수를 알려주는 알람 기능을 구현하던 도중에 문의를 남겼을시에 카운트를 할 수 있지만 그렇게 되면 카운트 값을 저장을 해야하기 때문에 Audit Log을 위해 생성하였던 생성 시간을 이용하기로 하였다. 이때 사용되었던 JPA Auditing을 이용한 생성일과 수정일을 자동화하는 방법에 대해 정리한다.

 

JPA Auditing을 사용하지 않고 메서드를 따로 만들어서도 가능하겠지만 그렇게되면 db에 수정이나 생성등의 작업이 이루어질때마다 메서드가 실행되야 되기 때문에 비효율적이며 코드도 지저분해진다.

 

Date Entity 생성하기

 

각 Entity 마다 Date를 저장할 멤버 변수를 생성해도 되지만 그렇게 되면 Entity가 늘어날때마다 계속 생성을 해줘야 하므로 Date Entity를 따로 만들어 각 Entity들이 Date Entity를 상속 받는 구조로 만든다.

@MappedSuperclass
@EntityListeners(value = {AuditingEntityListener.class})
@Getter
public class Date {

    @CreatedDate
    @Column(name = "regdate", updatable = false)
    private LocalDateTime regDate;

    @LastModifiedDate
    @Column(name = "moddate")
    private LocalDateTime modDate;
}

 

어노테이션 설명

  • @MappedSuperclass : JPA Entity 클래스들이 Date Entity를 상속할 경우 필드들(regDate, modDate)도 칼럼으로 인식하도록 함.
  • @EntityListeners(value = {AuditingEntityListener.class}): Date Entity 클래스에 Auditing 기능을 포함시킴.
  • @CreatedDate: Entity가 생성되어 저장될 때 시간이 자동 저장.
  • @LastModifiedDate: 조회한 Entity의 값을 변경할 때 시간이 자동 저장.

각 Entity 들 Date Entity 상속

 

public class Contact extends Date

 

JPA Auditing 기능 활성화

 

JPA Auditing 기능을 활성화 시키기 위해 @EnableJpaAuditng 어노테이션을 Application 클래스에 추가해준다.

@SpringBootApplication
@EnableJpaAuditing
public class Application {

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

}

댓글