개발일지
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 어노테이션을 추가해줘야 한다.