문제
사용자 회원가입시 createdDate, ModifiedDate 값이 제대로 들어가지 않는 이슈가 있었다.
원인
@CreatedDate와 @LastModifiedDate를 사용하였는데,
위의 어노테이션을 사용할 때는
@EnableJpaAuditing, @EntityListeners 이 두 어노테이션을 이용해 기능을 활성화 해야 하는데 이 부분을 빠트렸다.
해결
Application 실행 부분에 @EnableJpaAuditing을 추가하여 Auditing 기능을 활성화 한다.
@EnableJpaAuditing
@SpringBootApplication
public class Shop31cmApplication {
public static void main(String[] args) {
SpringApplication.run(Shop31cmApplication.class, args);
}
}
그리고 Entity에 @EntityListeners를 사용해 엔티티의 변화를 감지하여 생성 날짜, 수정 날짜를 자동으로 입력하도록 한다.
@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
@Entity
public class ExampleEntity extends BaseTimeEntity {
// 다른 필드들...
}
이렇게 하면 ExampleEntity는 BaseTimeEntity의 createdAt과 modifiedAt 필드를 갖는다.
'Project' 카테고리의 다른 글
[KBOTicket] 캐시 도입을 통한 경기 목록 조회 최적화 (0) | 2025.01.20 |
---|---|
[KBOTicket] 도커로 애플리케이션 배포하기 (0) | 2025.01.07 |
[KBOTicket] CI/CD의 개념과 구현 (0) | 2025.01.07 |
[KBOTicket] Kafka를 이용한 티켓팅 대기열 시스템 구현 및 순번 처리 (2) (0) | 2025.01.07 |
[KBOTicket] Kafka를 이용한 티켓팅 대기열 시스템 구현 및 순번 처리 (1) (0) | 2025.01.06 |