Post

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.