spring - createdAt이 null일때

송민지·2025년 6월 23일
0

PortCoin

목록 보기
5/7
post-thumbnail

문제

프론트엔드와 기능 연결작업을 하던 중

Portfolio table과 coin table의 연결 테이블인 PortfolioCoin table에서 created_at 컬럼이 저장되지 않고 있다는 사실을 알게 되었습니다.
두 테이블을 확인한 결과 createdAt 컬럼이 저장과 동시에 값이 들어오고 있다는 것을 확인하였습니다.

문제 원인

원인은 모든 엔티티들이 상속받는 Timestamped entity에 있었습니다.

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

    @CreatedDate
    @Column(updatable = false)
    private LocalDateTime createdAt;

    @LastModifiedDate
    @Column
    protected LocalDateTime updatedAt;

    @PrePersist
    protected void onCreate() {
        this.createdAt = LocalDateTime.now();
        this.updatedAt = null; // 생성 시에는 updatedAt을 null로 유지
    }
}

각 entity마다 중복된 createdAt과 updatedAt을 기본 entity로 만들어,
@EntityListeners(AuditingEntityListener.class)어노테이션을 통해 Api를 요청받으면 값을 자동으로 저장되게 하였습니다.
단일 entity에서는 제대로 저장이 되었지만, 연결테이블에서는 저장이 안되고 있었습니다.

해결

SpringApplication 실행 함수 위에 @EnableJpaAuditing 어노테이션을 설정하여 해결하였습니다.
@EnableJpaAuditing은 주석을 통해 JPA에서 값이 변경될 경우 엔티티의 생성 및 수정정보를 자동으로 등록하고 관리할 수 있도록 하고 있습니다.(Annotation to enable auditing in JPA via annotation configuration.)
EntityListeners(AuditingEntityListener.class)를 통해 설정을 했지만, 어플리케이션 실행시 활성화가 되지 않아서 생긴 오류였습니다.

Annotation Interface EnableJpaAuditing
Auditing
[Spring] @EnableJpaAuditing 기능 사용해 생성/수정 시간 등록하기

profile
항상 밝게

0개의 댓글