본문 바로가기
코딩 공부/web & Java

[JPA] @PrePersist와 @PreUpdate

by 현장 2024. 10. 18.

@PrePersist

@Column(name = "created_at")
private LocalDateTime createdAt;

@PrePersist
void createdAt() {
    this.createdAt = LocalDateTime.now();
}

엔티티가 생성될 때마다 실행되어야 하는 로직을 구현하는 데 사용되며, 엔티티가 생성될 때마다 현재 날짜를 값으로 설정하는 로직 등을 구현할 수 있습니다.

또한, 위의 이미지같이 JPA 엔티티(entity)가 비영속 상태에서 영속 상태가 되는 시점 이전에 실행이 되게 됩니다.

@PreUpdate

@Column(name = "modified_at")
private LocalDateTime modifiedAt;

@PreUpdate
void modifiedAt() {
    this.modifiedAt = LocalDateTime.now();
}

엔티티가 업데이트될 때마다 실행되어야 하는 로직을 구현하는 데 사용되며, 엔티티가 업데이트될 때마다 변경된 값을 기록하는 로직 등을 구현할 수 있습니다.

또한, 위의 이미지같이 영속 상태인 엔티티의 변경 사항이 데이터베이스에 반영되는 시점 이전에 실행이 되게 됩니다.

🏷️ 사용법

두 어노테이션을 추가한 메소드는 엔티티가 데이터베이서에 영속화 되기 전에 실행되며, 다음과 같은 작업을 수행할 수 있습니다.

  • 데이터 무결성을 보장하기 위해 특정 엔티티 필드의 값이 조건을 만족하지 못 하는 경우 예외를 발생시킬 수 있습니다.
  • 엔티티의 필드 값을 암호화하거나 사용자의 권한을 확인하는 작업을 수행할 수 있습니다.
  • 엔티티 필드 값이 변경될 때마다 이를 일관성 있게 처리하거나 데이터를 검증할 수 있습니다.

📖 Reference

Junhyunny's Devlogs

종벌🍀님의 기록하는 프로그래머 블로그