이벤트를 관찰하고 있다가 이벤트가 발생하면 특정 동작을 실행
- JPA에서는 7가지의 Event를 제공
- @PrePerist, @PostPersist : insert 메서드가 실행되기 전, 실행된 후
- @PreUpdate, @PostUpdate : merge 메서드가 실행되기 전, 실행된 후
- @PreRemove, @PostRemove : delete 메서드가 실행되기 전, 실행된 후
- @PostLoad : select 조회가 실행된 직후
💥 LocalDateTime과 같이 데이터 등록/수정 시간을 설정할때 용이
👉 대부분의 Entity에서 사용 (중복 발생)
@EntityListeners(value = MyEntityListener.class)
- Entity가 update 되면 기존의 데이터를 백업하는 용도로도 사용됨
- 이때 Entity Listener은 bean을 주입받을 수 없음 -> spring bean을 가져올 수 있는 특별한 클래스 필요
@Component public class BeanUtils implements ApplicationContextAware { // private static ApplicationContext applicationContext; // @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeanException { BeanUtils.applicationContext = applicationContext; } // public static <T>T getBean(Class<T> clazz) { return applicationContext.getBean(clazz); } }
- JPA에서는 위의 기능을 기본적으로 제공
- @EnableJpaAuditing : main에 붙여줌
- @EntityListeners(value = {AuditingEntityListener.class}) : Entity에 붙여줌
- @CreatedDate, @LastModifiedDate : Auditing할 데이터에 붙여줌
- 해당 클래스를 상속받는 Entity에서 해당 클래스의 속성들을 Entity의 컬럼으로 포함시키겠다는 의미
@Data @MappedSuperclass @EntityListeners(value = AuditingEntityListener.class) public class BaseEntity { @CreatedDate private LocalDataTime createdAt; // @LastModifiedDate private LocalDateTime updatedAt; }👉 BaseEntity를 상속받는 Entity 클래스에 createdAt 과 updatedAt 을 테이블의 컬럼으로 추가
- 상속받은 클래스의 정보를 처리해주기 위해 재정의를 할때 사용됨
@ToString(callsuper = true) @EqualsAndHashCode(callsuper = true)
데이터의 생성 정보와 수정 정보에 대한 시간을 기록하는 다양한 방법을 학습했다. 제일 자주 사용하는 기본 제공 Auditing을 숙달해야겠다.