JPA - @CreatedDate, @LastModifiedDate

전홍영·2023년 1월 2일

JPA

목록 보기
1/6

데이터 저장할 때 '생성된 시각' '마지막으로 수정된 시각'을 entity에 저장하고 싶을때 JPA에서는 @CreatedDate와 @LastModifiedDate 어노테이션을 이용하여 자동 저장할 수 있다.

프로젝트 도중에 createdDate와 lastModifiedDate가 계속 null 저장되어 한참을 애먹은 경험이 있는데 이는 내가 main 메소드에 @EnableJpaAuditing 어노테이션을 빼먹어서 계속 null이 저장되었던 것 이다. 그렇다면 @EnableJpaAuditing의 기능은 무엇일까?

@EnableJpaAuditing

어플리케이션의 main 메소드가 있는 클래스에 적용하며 JPA Auditing(감시, 감사) 기능을 활성하하기 위한 어노테이션이다. 이 어노테이션을 적용하면 DB가 생성, 수정, 삭제될 때 언제 누가 했는지를 자동으로 관리할 수 있게 해준다.

@CreaetedDate @LastModifiedDate

데이터를 생성 수정한 날짜를 자동으로 저장하기 위해 BaseTimeEntity 클래스를 만들어 생성, 수정 날짜를 기록할 Entity는 이 클래스를 상속받아 사용하면 효율적이라고 한다.

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

    @CreatedDate
    private LocalDateTime createdDate;

    @LastModifiedDate
    private LocalDateTime modifiedDate;
}
  • MappedSuperclass : 이 어노테이션은 '생성 시간' '수정 시간'과 같은 공통 매핑 정보가 필요할 때 사용된다. @MappedSuperclass 어노테이션을 사용함으로써 JPA Entit 클래스들이 BaseTimeEntity 클래스를 상속할 경우 이 클래스의 필드를 인식하도록 한다.
  • 이 BaseTimeEntity 클래스는 직접 Enttiy로 사용되지 않기 때문에 추상 클래스로 만들어지는 경우가 많다.
  • EntityListeners : JPA Entity에서 이벤트가 발생할 때마다 특정 로직을 실행시킬 수 있는 어노테이션이다. AuditingEntityListener.class가 callback listener로 지정되어 Entity에서 이벤트가 발생할 때마다 특정 로직이 수행된다.

-reference-

profile
Don't watch the clock; do what it does. Keep going.

0개의 댓글