생성일: 2022년 3월 23일 오후 9:28
태그: JPA
Listener라는 것 자체가 대기하고 있다가 사용하는 것이다! 그렇다면 JPA에서는 총 7가지를 제공한다!
@PrePersist
public void prePersist(){
System.out.println(">>> prePersist");
}
@PostPersist
public void postPersist(){
System.out.println(">>> postPersist");
}
@PreUpdate
public void preUpdate(){
System.out.println(">>> preUpdate");
}
@PostUpdate
public void postUpdate() {
System.out.println(">>> postUpdate");
}
@PreRemove
public void preRemove(){
System.out.println(">>> preRemove");
}
@PostRemove
public void postRemove(){
System.out.println(">>> postRemove");
}
@PostLoad
public void postLoad(){
System.out.println(">>> postLoad");
}
먼저 User class에 void로 각 7가지 어노테이션을 다 적용시켜놨다
실행 결과를 확인해보면
작동을 봐보면 좀더 쉽게 알 수 있다!
그럼 이러한 것들이 언제 어떻게 쓰이는가?
이렇게 계속 넣는게 개발자한테는 큰 오류가 발생할 수 있다.
그렇기에 반복되는 구간을 pre한테 넘길 수 가 있다.
@PrePersist
public void prePersist(){
this.createAt = LocalDateTime.now();
this.updateAt = LocalDateTime.now();
}
하고 기존 set At 구문들은 주석처리를 해주자!
⁉️하지만 이게 최선일까?
인터페이스와 클래스를 만들어주면 더 유지보수 하기 좋게 만들 수 있다.
public class MyEntityListener {
@PrePersist
public void prePersist(Object o){
if(o instanceof Auditable){
((Auditable) o).setCreatedAt(LocalDateTime.now());
((Auditable) o).setUpdatedAt(LocalDateTime.now());
}
}
@PreUpdate
public void preUpdate(Object o){
if(o instanceof Auditable){
((Auditable) o).setCreatedAt(LocalDateTime.now());
((Auditable) o).setUpdatedAt(LocalDateTime.now());
}
}
}
public interface Auditable {
LocalDateTime getCreatedAt();
LocalDateTime getUpdatedAt();
void setCreatedAt(LocalDateTime createdAt);
void setUpdatedAt(LocalDateTime updatedAt);
}
여기서 get들은 사실 LocalDateTime에서 지원을 해준다!! 우리는 이 지원해주는 것을 이용할 거다!
그러기 위해서는 꼬옥!
—> 사용할려는 class에 명시를 해줘야 한다.