![[JPA] @EntityListeners](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwSdYt%2FbtsJqdnY0hF%2FxNMcQGOHMH8PMZHtRcMB5k%2Fimg.png)
[JPA] @EntityListeners카테고리 없음2024. 9. 4. 12:29
Table of Contents
EntityListeners?
Entity가 삽입, 삭제, 수정, 조회 등의 작업을 할 때 전, 후에 작업을 하기 위한 어노테이션
- @PrePersist
Persist(Insert) 메서드가 호출되기 전에 실행되는 메서드 - @PreUpdate
Merge(Update) 메서드가 호출되기 전에 실행되는 메서드 - @PreRemove
Remove(Delete) 메서드가 호출되기 전에 실행되는 메서드 - @PostPersist
Persist(Insert) 메서드가 호출된 후에 실행되는 메서드 - @PostUpdate
Merge(Update) 메서드가 호출된 후에 실행되는 메서드 - @PostRemove
Remove(Delete) 메서드가 호출된 후에 실행되는 메서드 - @PostLoad
Select 조회가 실행된 직후에 실행되는 메서드
Example
데이터가 삽입되기 전, 수정되기 전 createdAt과 updatedAt 시간을 조작해야한다.
- SampleApplication.java
@SpringBootApplication
@EnableJpaAuditing
public class SampleApplication {
public static void main(String[] args) {
SpringApplication.run(SampleApplication.class, args);
}
}
@EnableJpaAuditing
Spring Data JPA에서 제공하는 Auditing 기능을 제공하기 위해, 엔티티에 변경시점 감지를 위한 어노테이션을 붙여준다.
- TimeStamp.java
@Setter
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class) // AuditingEntityListener.class를 EntityListners로 등록
@Slf4j
public abstract class BaseEntity {
@CreatedDate
@Column(updatable = false)
@Temporal(TemporalType.TIMESTAMP)
private LocalDateTime createdAt;
@CreatedBy
@Column(updatable = false)
private Long createdBy;
@LastModifiedDate
@Column
@Temporal(TemporalType.TIMESTAMP)
private LocalDateTime updatedAt;
@LastModifiedBy
@Column(updatable = false)
private Long updatedBy;
@Column
@Temporal(TemporalType.TIMESTAMP)
private LocalDateTime deletedAt;
@Column(updatable = false)
private Long deletedBy;
...
}
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
abstract
- 생성시작과, 수정시각은 대부분의 엔티티에서 사용되는 필드이다.
따라서 이를 별개의 엔티티 클래스로 분리하고, 다른 엔티티에서 extends로 상속받아 사용하면 중복 코드를 줄일 수 있다. - AuditingEntityListener 는 Spring Data JPA에서 제공하는 이벤트 리스너이다.
- 추상클래스(abstract)와 @MappedSuperClass를 함께 사용할 경우, 이러한 이점이 있다.
- 강제 상속
- 추상 클래스는 인스턴스를 직접 생성할 수 없기 때문에, 자식 클래스가 반드시 상속받아야 한다.
- 이를 통해 코드 구조를 명확하게 유지할 수 있다.
- 공통 기능 구현
- 추상 클래스는 공통적인 필드나 메서드를 구현하고, 자식 클래스에 해당 기능을 제공한다.
- 객체-관계 매핑에서 활용
- @MappedSuperclass를 추상 클래스와 함께 사용하면, 공통적인 매핑 정보(예: createdAt, updatedAt)를 여러 엔티티에 쉽게 적용할 수 있다.
- 강제 상속
참고
https://juoonge.notion.site/EntityListeners-a6974cbd8e7c494b8cae520b033db60b
@EntityListeners | Notion
EntityListeners?
juoonge.notion.site
https://velog.io/@seongwon97/Spring-Boot-Entity-Listener
[Spring JPA] Entity Listener
Entity Listener는 엔티티의 변화를 감지하고 데이블의 데이터를 조작하는 일을 한다.
velog.io
@킴준현 :: 차근차근 꾸준히
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!