mongoDB @CreatedDate 저장이 안될 경우

greenTea·2024년 6월 3일

Spring Data MongoDB를 사용하던 중 mongodb로 작업을 하고 있는데 계속 @CreatedDate에 저장이 되지 않는 문제가 발생하였습니다.

문제 원인

@Document
public class MongoEntity {
    @Id
    private String id;

    @CreatedDate
    private LocalDateTime createDate;

    @LastModifiedDate
    private LocalDateTime updateDate;
}

위 코드에서 id 필드를 미리 지정하면, Spring Data MongoDB는 해당 객체를 기존 엔티티로 간주하여 @CreatedDate@LastModifiedDate 필드의 자동 설정을 수행하지 않게 됩니다.(jpa와 같은 원리로 동작하고 있다고 생각하면 될 것 같습니다.)

해결 방법

  1. MongoDB Auditing 활성화
    먼저 Spring Data MongoDB의 Auditing을 설정합니다.

    @Configuration
    @EnableMongoAuditing
    public class MongoConfig {
    }
  1. Auditing Handler:
    AuditingEntityListener를 통해 생성 및 수정 날짜가 자동으로 설정되도록 합니다.

    @Document
    @EntityListeners(AuditingEntityListener.class)
    public class MongoEntity {
        @Id
        private String id;
    
        @CreatedDate
        private LocalDateTime createDate;
    
        @LastModifiedDate
        private LocalDateTime updateDate;
    }

    이 때 주의할점으로는 @CreatedDate,@LastModifiedDate 기능을 사용하고자 한다면 기존의 id를 사용하지 않고 새로운 id를 사용할 수 있도록 해야합니다. spring data jpa를 사용하던 것과 비슷하다는 것을 알 수 있습니다.

참고

spring mongodb

profile
greenTea입니다.

0개의 댓글