[JPA] Note2. @BaseTimeEntity Refactoring

2026. 2. 14. 11:02·Spring Framework/JPA
반응형

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
'Spring Framework/JPA' 카테고리의 다른 글
  • [JPA] Note1 @EnableJpaAduting @EntityListeners
  • [JPA] @Transactional
  • [JPA] Embedded, Embeddable annotation & Refactoring Example
novs
novs
https://github.com/novvvv
  • novs
    nov.Zip
    novs
  • 전체
    오늘
    어제
    • All (381)
      • Project (2)
        • Rag Blog (2)
      • Spring Framework (27)
        • Java Fundamental (13)
        • SpringSecurity (1)
        • Multi Thread Programming (3)
        • Spring Framework (3)
        • JPA (4)
      • Security (2)
      • Cloud (2)
        • Docker (1)
        • AWS (1)
      • Mobile Development (0)
      • dev (7)
        • Git (2)
        • React (2)
        • Android (1)
        • Computer Science (2)
      • Algorithm (29)
        • PS With C++ (8)
        • Algorithm (2)
        • BOJ (16)
        • AtCoder (3)
      • Archive (312)
        • 동아리 사이트 개발일지 (3)
        • 카페 주문 시스템 (3)
        • UIKit (2)
        • Swift Language (3)
        • PS With Swift (2)
        • Next.js (3)
        • React (2)
        • Git (1)
        • Linux (3)
        • Vue.js (2)
        • Flutter (11)
        • ...2022 (34)
        • ...2024 (2)
        • C# (14)
        • C&C++ (47)
        • GameDevelop (19)
        • WEB (32)
        • CS (7)
        • Algorithm (13)
        • ProblemSolving (105)
        • Daily (2)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    다이나믹프로그래밍
    스택
    HTML
    C++문법
    C++
    안드로이드스튜디오
    코딩테스트
    유니티
    문제풀이
    자바스크립트
    dp
    프로그래머스
    c#
    깃허브
    C
    BFS
    소스코드
    C언어
    자료구조
    STL
    고득점키트
    js
    깃
    백준
    그리디
    알고리즘
    객체지향
    BOJ
    javascript
    sort
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
novs
[JPA] Note2. @BaseTimeEntity Refactoring
상단으로

티스토리툴바