1. 어떤것들이 있는지 알아보자


1. @PrePersist

@PrePersist는 엔티티가 처음으로 영속성 컨텍스트에 저장되기 전에 호출됩니다. 주로 엔티티 생성 시 초기값을 설정하거나, 자동으로 설정해야 할 필드를 처리할 때 사용됩니다.

사용 예시:

import jakarta.persistence.*;
import java.time.LocalDateTime;

@Entity
public class User {

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

    private String name;

    private LocalDateTime createdAt;

    private LocalDateTime updatedAt;

    // 엔티티가 영속성 컨텍스트에 저장되기 전에 호출됨
    @PrePersist
    protected void onCreate() {
        this.createdAt = LocalDateTime.now();
    }

    // Getter, Setter, 기타 메서드들
}

위 코드에서 onCreate() 메서드는 @PrePersist로 마킹되어, User 엔티티가 처음 저장될 때 createdAt 필드를 현재 시간으로 설정합니다.

2. @PostPersist

@PostPersist는 엔티티가 영속성 컨텍스트에 저장된 후에 호출됩니다. 데이터베이스에 저장된 후 추가 작업이 필요할 때 사용됩니다.

사용 예시:

@Entity
public class User {

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

    private String name;

    // 엔티티가 영속성 컨텍스트에 저장된 후 호출됨
    @PostPersist
    protected void afterPersist() {
        System.out.println("User entity persisted with ID: " + this.id);
    }

    // Getter, Setter, 기타 메서드들
}

여기서는 User 엔티티가 데이터베이스에 저장된 후에 afterPersist() 메서드가 호출되어 콘솔에 메시지를 출력합니다.

3. @PreUpdate

@PreUpdate는 엔티티가 수정되기 전에 호출됩니다. 수정 전에 데이터의 유효성을 검증하거나, 수정 시간을 기록하는 데 사용할 수 있습니다.

사용 예시:

@Entity
public class User {

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

    private String name;

    private LocalDateTime updatedAt;

    // 엔티티가 수정되기 전에 호출됨
    @PreUpdate
    protected void onUpdate() {
        this.updatedAt = LocalDateTime.now();
    }

    // Getter, Setter, 기타 메서드들
}