@PrePersist에 대하여

1. PrePersist의 약어와 한글 번역

  1. 약어:
    • PrePersist를 풀어보면 다음과 같이 해석할 수 있습니다:
      • Pre: "이전에" (Before)
      • Persist: "영속화" 또는 "저장" (Persist)
    따라서 PrePersist는 저장되기 이전에 실행이라는 의미를 가지고 있습니다.
  2. 한글 번역:
    • @PrePersist를 한글로 번역하면 **"저장되기 직전에"**라는 의미입니다.
    • 이 어노테이션은 엔티티 객체가 데이터베이스에 **영속적으로 저장(persist)**되기 직전에 특정 로직을 실행한다는 것을 의미합니다.

예를 들어 설명하자면

@PrePersist는 저장 직전에 실행되는 메서드를 지정하기 위해 사용되므로, 엔티티가 처음 데이터베이스에 저장되기 전에 수행해야 하는 작업을 설정할 때 활용됩니다.


2.@PrePersist 어노테이션의 역할

@PrePersist는 JPA 라이프사이클 콜백(Lifecycle Callback) 중 하나로, 엔티티가 영속성 컨텍스트에 저장되기 전에 실행되는 메서드를 지정하는 어노테이션입니다.

즉, 엔티티 객체가 persist() 호출로 처음 데이터베이스에 저장되기 직전에 특정 로직을 실행하고 싶을 때 사용합니다.


3.주요 특징

  1. 호출 시점:
    • EntityManager.persist(entity)가 호출되거나, 트랜잭션이 커밋되면서 새로운 엔티티가 데이터베이스에 저장되기 직전에 실행됩니다.
  2. 사용 목적:
    • 엔티티가 데이터베이스에 저장되기 전에 초기화 작업이나 기본값 설정을 수행할 수 있습니다.
    • 예를 들어, createdDate와 같은 생성 타임스탬프를 자동으로 설정하는 데 자주 사용됩니다.
  3. 적용 대상:
    • @Entity 클래스 내에서 선언된 메서드에만 사용 가능합니다.
    • 메서드는 매개변수가 없어야 하고, 반환값이 없어야 하며, public 또는 protected로 선언되어야 합니다.

4.예제

@Entity
public class ExampleEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false, updatable = false)
    private Timestamp createdDate;

    @Column(nullable = false)
    private Timestamp lastUpdateDate;

    @PrePersist
    protected void onCreate() {
        Timestamp now = new Timestamp(System.currentTimeMillis());
        this.createdDate = now;       // 데이터 생성 시 시간 설정
        this.lastUpdateDate = now;   // 생성 시 최종 업데이트 시간도 동일하게 설정
    }
}

동작 원리

  1. ExampleEntity가 JPA의 persist() 메서드로 저장 요청을 받으면,
  2. onCreate() 메서드가 자동으로 실행됩니다.
  3. createdDate와 lastUpdateDate가 설정된 후 데이터베이스에 저장됩니다.

'Spring - Spring Boot' 카테고리의 다른 글

Spring 과 톰캣  (1) 2025.01.08
Spring - Spring Boot - Swagger 설정하기  (0) 2024.12.12
Spring Security - 2 - Bean 등록  (1) 2024.12.04
Spring Security - 1 - 설정  (2) 2024.12.04