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이 존재한다.
JPA Annotaion을 사용하기 위해 projectApplication에 @EnableJpaAuditing을 추가하는 것을 잊지 말자!