개발일지

20231206 - @CreatedDate, @LastModifiedDate

YIS0707 2023. 12. 6. 23:29

프로젝트에서 게시물 CRUD 기능 구현을 하면서 게시글의 작성 시간과 수정 시간을 DB에 저장하기 위해 Timestamp 클래스를 따로 만들어서 필요한 Entity에서 사용하기로 했다.

 

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

    @CreatedDate
    @Column(updatable = false)
    @Temporal(TemporalType.TIMESTAMP)
    private LocalDateTime createdAt;

    @LastModifiedDate
    @Column
    @Temporal(TemporalType.TIMESTAMP)
    private LocalDateTime modifiedAt;

}

 

Timestamp 클래스는 다음과 같다

@MappedSuperclass 어노테이션을 통해 이 클래스를 상속받는 자식클래스에 매핑정보를 제공한다.

 

@EntityListeners 어노테이션을 통해서 JPA Entity에서 이벤트가 발생할 때마다 AuditingEntityListener.class 가 callback 클래스로 지정되어 특정 로직을 수행하게 된다.

 

@CreatedDate는 DB에 저장될 때의 시간을, @ModifiedDate는 수정됐을 때의 시간을 나타낸다.

 

@Temporal(TemporalType.TIMESTAMP)를 통해 DB 타입에 맞게 매핑해준다.

 

여기까지 설정을 하고 빌드를 하면 계속 null값만 들어온다. 마지막으로 Application 클래스에 @EnableJpaAuditing 어노테이션을 추가해줘야 한다.