본문 바로가기
JPA

JPA - Spring Data JPA에서 엔티티의 생성 시간과 수정 시간을 자동으로 관리하기

by 지민재 2024. 7. 17.
반응형
SMALL

Spring Data JPA에서 엔티티의 생성 시간과 수정 시간을 자동으로 관리하기

Spring Data JPA를 사용하다 보면 엔티티의 생성 시간과 수정 시간을 자동으로 관리하고 싶을 때가 있다. 이를 위해 보통 createdTime과 updatedTime 필드를 추가하고, 이 필드를 자동으로 업데이트해주는 방법을 고민하게 된다. 이번 포스팅에서는 이러한 과정을 간단하게 해결해줄 수 있는 BaseTime 클래스를 소개 해보겠다.. ! 

1. Lombok으로 간편하게 Getter 생성

먼저, Lombok의 @Getter 어노테이션을 사용하여 클래스의 모든 필드에 대한 getter 메서드를 자동으로 생성해준다. 요즈음 다 .. Lombok 사용함. 물론 나도 사용함 이유는 코드의 간결성과 가독성을 높일 수 있음 ㅎ

@Getter
public class BaseTime {
    // 이후 다른 어노테이션 및 필드 추가
}

 

2. JPA 상속 매핑을 위한 @MappedSuperclass

@MappedSuperclass 어노테이션은 JPA에서 사용되며, 이 클래스를 상속받는 자식 클래스가 이 클래스의 필드를 JPA 엔티티의 필드로 인식하도록 하는데, 즉, BaseTime 클래스는 직접적으로 데이터베이스 테이블과 매핑되지 않지만, 이를 상속받는 클래스는 해당 필드를 테이블의 컬럼으로 포함하게 된다.

@Getter
@MappedSuperclass
public class BaseTime {
    // 이후 다른 어노테이션 및 필드 추가
}
 

3. 엔티티 리스너 설정을 위한 @EntityListeners 

@EntityListeners(AuditingEntityListener.class) 어노테이션은 JPA 엔티티에 대한 이벤트를 수신하여 특정 동작을 수행하는 리스너를 지정한다. AuditingEntityListener는 엔티티의 생성 및 수정 시점을 자동으로 관리하기 위해 사용된다.

@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class BaseTime {
    // 이후 다른 어노테이션 및 필드 추가
}
 

4. 자동으로 시간 설정을 위한 @CreatedDate와 @LastModifiedDate

@CreatedDate와 @LastModifiedDate 어노테이션을 사용하면 엔티티가 생성될 때와 수정될 때의 시간을 자동으로 설정할 수 있다. 이 필드들은 JPA의 Auditing 기능을 사용하여 자동으로 관리된다.

@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class BaseTime {

    @CreatedDate
    private LocalDateTime createdTime;

    @LastModifiedDate
    private LocalDateTime updatedTime;
}

 

최종 코드

@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class BaseTime {
    
    @CreatedDate
    private LocalDateTime createdTime;

    @LastModifiedDate
    private LocalDateTime updatedTime;
}

 

마치며

이제 BaseTime 클래스를 상속받는 모든 엔티티는 생성 시각과 마지막 수정 시각을 자동으로 관리할 수 있다. 이러한 설정은 데이터베이스에 저장되는 엔티티의 이력 관리에 도움이되고, 이를 통해 코드의 중복을 줄이고 유지 보수성을 높일 수 있다. Spring Data JPA의 강력한 기능을 활용하여 더욱 효율적인 개발을 해보자.

'JPA' 카테고리의 다른 글

JPA - @DynamicUpdate  (0) 2024.07.17
JPA - @EntityListeners 엔티티의 생명주기 이벤트 리스닝  (0) 2024.07.17
JPA - @NoArgsConstructor & @AllArgsConstructor 개념 및 사용법  (0) 2024.05.16
@Builder  (1) 2024.01.04
@GeneratedValue  (2) 2023.11.21

댓글