@PrePersist 선언된 것이 뭔지도 모르고

@PrePersist가 선언된 메소드를 실행 후
Repository.save(객체) 를 해버린 부끄러움을 잊지 않기위해.....ㅎㅎ


Entity Event??

https://www.baeldung.com/jpa-entity-lifecycle-events 문서에 보면 아래와 같이 적혀있다.

JPA는 다음과 같은 7개의 선택적 수명 주기 이벤트를 지정합니다.
- 새로운 엔티티에 대해 persist가 호출되기 전에 – @PrePersist
- 새로운 엔티티에 대해 persist가 호출된 후 –  @PostPersist
- 엔티티가 제거되기 전 –  @PreRemove
- 엔티티가 삭제된 후 – @PostRemove
- 업데이트 작업 전 – @PreUpdate
- 엔티티가 업데이트된 후 – @PostUpdate
- 엔티티가 로드된 후 – @PostLoad

위 내용이 구글 번역으로 이루어져 이해가 잘 안갈 수도 있다. 위 내용을 풀어서 작성한 블로그 글이 많고 그중에 JoJun's님이 쓰신 글을 좀 가져와봤다.

 

[SpringBoot] JPA Entity Listener 엔티티 이벤트 리스너

YOPLE서비스를 개발하면서 Entity가 저장될 때 또는 조회할 때의 이벤트를 캐치하여 처리를 해야 하는 이슈가 발생했다. 그러던 중 JPA에서 아주 편안한 기능을 제공한다는것을 알게 되었고 포스트

developjuns.tistory.com


 

엔티티 객체의 이벤트라면 "저장", "조회", "수정", "삭제"의 이벤트를 말한다.   

이벤트 콜백은 JPA에서 어노테이션으로 지원하며 어노테이션의 Target은 Method다.

- Event 실행 전 

  • @PrePersist       : Entity Save ( Insert )가 실행되기 전
  • @PreUpdate      : Entity Save ( Merge )가 실행되기 전
  • @PreRemove     : Entity Delete가 실행되기 전

- Event 실행 이후.

  • @PostPersist      : Entity Save ( Insert )가 실행되고 난 후
  • @PostUpdate     : Entity Save ( Merge )가 실행되고 난 후
  • @PostRemove    : Entity Delete가 실행되고 난 후
  • @PostLoad        : Entity Find가 실행되고 난 후

특히 비밀번호 변경에 이용하신 개발자도 있는데 내가 보기엔 너무 신기한 사용방법이라 생각이 들었다.

 

JPA entity listener 만들기

엔티티의 변화를 감지해 같은 테이블과 다른 테이블 모두 데이터를 조작하는 entity listener 를 만들어 적용한 경험을 간단한 예와 소개합니다.

bum752.github.io

 

복사했습니다!