Entity Listener의 활용_1

이진영·2022년 10월 10일
0

Spring

목록 보기
2/4

생성일: 2022년 3월 23일 오후 9:28
태그: JPA

Listener라는 것 자체가 대기하고 있다가 사용하는 것이다! 그렇다면 JPA에서는 총 7가지를 제공한다!

  • 이번 시간은 총 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에 명시를 해줘야 한다.

profile
내가 공부한 것들을 적는 공간

0개의 댓글