JPA 엔티티의 생명주기 이벤트(생성, 수정 등)에 반응하여 자동으로 특정 메서드를 실행할 수 있게 해주는 기능이다.
→ 핵심 목적: 반복되는 엔티티 전처리/후처리 로직을 재사용 가능하게 분리.
어노테이션명 | 호출시점 |
@PrePersist | insert 쿼리 실행 전 |
@PostPersist | insert 쿼리 실행 후 |
@PreUpdate | update 쿼리 실행 전 |
@PostUpdate | update 쿼리 실행 후 |
@PreRemove | delete 쿼리 실행 전 |
@PostRemove | delete 쿼리 실행 후 |
@PostLoad | select 쿼리 실행 후 |
import java.time.LocalDateTime;
public interface Auditable {
LocalDataTime getCreateAt();
LocalDataTime getUpdateAt();
void setCreatedAt(LocalDateTime createdAt);
void setUpdatedAt(LocalDateTime updatedAt);
}
import jakarta.persistence.*;
import java.time.LocalDateTime;
public class AuditListener {
@PrePersist
public void perPersist(Object o) {
if (o instanceof Auditable) {
((Auditable) o).setCreateAt(LocalDateTime.now());
((Auditable) o).setUpdateAt(LocalDateTime.now());
}
}
@PreUpdate
public void perUpdate(Object o) {
if (o instanceof Auditable) {
((Auditable) o).setUpdateAt(LocalDateTime.now());
}
}
}
import jakarta.persistence.*;
import java.time.LocalDateTime;
@Entity
@NoArgsConstructor
@Data
@EntityListeners(AuditListener.class)
public class Post implements Auditable {
@Id
@GeneratedValue
private Long id;
private String title;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
// getter/setter 생략 가능
}
AuditingEntityListener
Spring Boot에서 제공하는 AuditingEntityListener는 Spring Data JPA의 감사(Auditing) 기능을 자동화해주는 리스너 클래스다. 이 리스너를 통해 createdDate, lastModifiedDate, createdBy, lastModifiedBy 같은 필드를 자동으로 관리할 수 있다.
import jakarta.persistence.*;
import lombok.Data;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import java.time.LocalDateTime;
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
@Data
public class BaseEntity {
@CreatedDate
private LocalDateTime createdAt;
@LastModifiedDate
private LocalDateTime updatedAt;
}
import jakarta.persistence.*;
import java.time.LocalDateTime;
@Entity
@NoArgsConstructor
@Data
@ToString(callSuper= true)
@EqualsAndHashCode(callSuper= true)
@EntityListeners(AuditListener.class)
public class Post extends BaseEntity implements Auditable {
@Id
@GeneratedValue
private Long id;
private String title;
}
'Spring' 카테고리의 다른 글
JPA - 1:N 연관 관계 (0) | 2025.06.16 |
---|---|
JPA - 1:1 연관 관계 (0) | 2025.06.16 |
JPA (1) | 2025.06.06 |
Jacoco - 테스트 커버리지 확인하기 (1) | 2025.04.21 |
JUnit (0) | 2025.04.21 |