CreatedDate, LastModifiedDate 이슈
문제
사용자 회원가입시 createdDate, ModifiedDate 값이 제대로 들어가지 않는 이슈가 있었다.
원인
@CreatedDate와 @LastModifiedDate를 사용하였는데,
위의 어노테이션을 사용할 때는
@EnableJpaAuditing, @EntityListeners 이 두 어노테이션을 이용해 기능을 활성화 해야 하는데 이 부분을 빠트렸다.
해결
Application 실행 부분에 @EnableJpaAuditing을 추가하여 Auditing 기능을 활성화 한다.
1
2
3
4
5
6
7
8
@EnableJpaAuditing
@SpringBootApplication
public class Shop31cmApplication {
public static void main(String[] args) {
SpringApplication.run(Shop31cmApplication.class, args);
}
}
그리고 Entity에 @EntityListeners를 사용해 엔티티의 변화를 감지하여 생성 날짜, 수정 날짜를 자동으로 입력하도록 한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseTimeEntity {
@CreatedDate
@Column(name = "created_at")
private LocalDateTime createdAt;
@LastModifiedDate
@Column(name = "modified_at")
private LocalDateTime modifiedAt;
}
추가로 이번 프로젝트에서는
날짜 관련한 BaseTimeEntity를 별도로 추상 클래스로 정의하였다.
이 클래스는 날짜 관련한 필드를 포함하며, @CreatedDate와 @LastModifiedDate 어노테이션을 사용하여 생성일과 수정일을 자동으로 관리한다.
@MappedSuperclass 을 지정하여, 이 클래스를 상속 받는 엔티티들은 createdAt과 modifiedAt 필드를 자동으로 포함하게 된다.
따라서 날짜 관련 필드가 필요한 엔티티들은 이 BaseTimeEntity를 확장하여 사용할 수 있다.
ExampleEntity.java
1
2
3
4
@Entity
public class ExampleEntity extends BaseTimeEntity {
// 다른 필드들...
}
이렇게 하면 ExampleEntity는 BaseTimeEntity의 createdAt과 modifiedAt 필드를 갖게 된다.
This post is licensed under
CC BY 4.0
by the author.