[Spring] @PrePersist, @PreRemove

Jisu_M·2024년 11월 11일

SpringBoot @PrePersist, @PreRemove란?

@PrePersist 및 @PreRemove는 Entity가 Persist(삽입) 또는 Remove(삭제)되기 전에 JPA Provider가 자동으로 실행해야 하는 메서드를 지정하는 데 사용되는 JPA의 Annotation이다.

기존에 @CreateAt 과 @LastModifiedDate를 사용했는데

@CreatedDate
@Column(updatable = false)
@Temporal(TemporalType.TIMESTAMP)
private LocalDateTime createdAt;

@DeletedAt은 존재하지 않아 deletedAt, deletedBy를 구현할 방법을 찾다가 @PreRemove를 사용해 보기로 했다.

@PreRemove가 적용된 메서드는
Entity를 영속성 컨텍스트에서 삭제하기 직전에 호출된다. 또한 삭제 명령어로 영속성 전이가 일어날 때도 호출된다.

@PreRemove
public void preRemove() {
    this.deleteAt = LocalDateTime.now();
}

이렇게 사용한다면 deletedAt를 선언하고, 메소드를 호출하여 시간을 저장하지 않고 @PreRemove Annotation으로 한 번에 삭제 시간을 저장할 수 있다.

@PreRemove 말고도 다양한 JPA Event Annotaion이 존재한다.

  • @PrePersist : Persist(insert)메서드가 호출되기 전에 실행되는 메서드
  • @PreUpdate : merge메서드가 호출되기 전에 실행되는 메서드
  • @PreRemove : Delete메서드가 호출되기 전에 실행되는 메서드
  • @PostPersist : Persist(insert)메서드가 호출된 이후에 실행되는 메서드
  • @PostUpdate : merge메서드가 호출된 후에 실행되는 메서드
  • @PostRemove : Delete메서드가 호출된 후에 실행되는 메서드
  • @PostLoad : Select조회가 일어난 직후에 실행되는 메서드

JPA Annotaion을 사용하기 위해 projectApplication에 @EnableJpaAuditing을 추가하는 것을 잊지 말자!

profile
개발 여정을 기록하며 성장하는 매일

0개의 댓글