반응형
Note1. @BaseTimeEntity
대부분의 Entity에는 created_at, updated_at column이 포함되어 있다.
이러한 생성/수정일자를 관리하는 방식은 여러가지로 개인 프로젝트에서도 아래와 같이 User Entity는 JPA Auditing 기능을 사용하고 Problem Entity에는 생성자에서 생성/수정 일자를 초기화하는 등 여러 방식이 혼합되어 있었다.
하지만 이는 코드 일관성과 유지보수 측면에서 좋지 않은 코드이고 이러한 생성/수정 일자를 한 곳에서 일괄적으로 관리하기 위해 JPA는 BaseTimeEntity라는 어노테이션을 제공한다.
User Entity
@CreatedDate
@Column(name = "created_at", updatable = false)
private LocalDateTime createdAt;
@LastModifiedDate
@Column(name = "updated_at")
private LocalDateTime updatedAt;
Problem
@Column(name = "created_at")
private LocalDateTime createdAt;
@Column(name = "updated_at")
private LocalDateTime updatedAt;
// 기본 생성자
public Problem() {
LocalDateTime now = LocalDateTime.now();
this.createdAt = now;
this.updatedAt = now;
}
Note2. Code
전역에서 사용할 BaseTimeEntity를 선언한다.
@MappedSuperclass 어노테이션으로 엔터티가 아닌 상속용 클래스임을 명시하고, JPA Auditing을 사용해 자동으로 시간을 관리하도록 해주었다.
/**
* 모든 엔티티의 공통 시간 필드를 관리하는 Base 클래스
* - @MappedSuperclass: 엔티티가 아닌 상속용 클래스
* - JPA Auditing을 사용하여 자동으로 시간 관리
*/
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
@Getter
public abstract class BaseTimeEntity {
@CreatedDate
@Column(name = "created_at", nullable = false, updatable = false)
private LocalDateTime createdAt;
@LastModifiedDate
@Column(name = "updated_at", nullable = false)
private LocalDateTime updatedAt;
}
created_at, updated_at column을 사용할 엔터티는 별도의 헬퍼 메서드나, 생성자를 선언할 필요 없이 BaseTimeEntity를 상속받기만 하면 자동으로 컬럼이 생성되어 관리된다.
public class User extends BaseTimeEntity {
...
}반응형
'Spring Framework > JPA' 카테고리의 다른 글
| [JPA] Note1 @EnableJpaAduting @EntityListeners (0) | 2026.02.13 |
|---|---|
| [JPA] @Transactional (0) | 2025.09.23 |
| [JPA] Embedded, Embeddable annotation & Refactoring Example (0) | 2025.09.21 |