@PrePersist
⏱ @PrePersist
정의
@PrePersist는 JPA 엔티티가 영속화되기 직전에 실행되는 콜백 애너테이션이다.INSERT전에 초기값 설정이나 로그 처리 같은 작업을 수행할 때 사용한다.
저장 직전에 필요한 값을 채우거나 생성 시각, 상태값을 초기화할 때 유용하다.
🧩 역할
- 엔티티 저장 직전에 로직을 실행한다
- 기본값 초기화에 사용된다
- 생성일 자동 등록 같은 작업에 활용된다
- 엔티티 내부 또는 리스너에서 사용할 수 있다
🛠 사용법
엔티티 내부에서 사용
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.PrePersist;
import javax.persistence.Table;
@Entity
@Table(name = "COM_VAR")
public class CommonVariable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String variableValue;
@PrePersist
public void beforeSave() {
if (variableValue == null) {
this.variableValue = "DEFAULT";
}
}
}
엔티티 리스너와 함께 사용
import javax.persistence.PrePersist;
public class AuditListener {
@PrePersist
public void beforeInsert(Object obj) {
System.out.println("객체가 저장되기 전 실행: " + obj);
}
}
@Entity
@EntityListeners(AuditListener.class)
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
}
⚠️ 주의사항
- 콜백 로직은 단순하게 유지하는 것이 좋다.
- 너무 많은 비즈니스 로직을 넣으면 엔티티 책임이 커질 수 있다.
@EntityListeners와 함께 사용할 수도 있다.- 생성 시각을 기록할 때는
@EnableJpaAuditing이나@CreationTimestamp와 역할이 겹치지 않도록 정리하는 것이 좋다.
📌 정리
@PrePersist는 저장 직전에 실행되는 JPA 콜백 애너테이션이다.- 기본값 초기화나 저장 전 처리에 적합하다.
- 엔티티 내부와 리스너 둘 다에서 사용할 수 있다.
댓글남기기