Java/Java JPA

Java JPA에서 제공하는 다양한 Listener들

너어디사니 2023. 8. 12. 06:52

안녕하세요 오늘은 JPA에서 제공하는 다양한 Listener들을 소개해보려고 합니다

 

Java JPA에서 제공하는 Listener들은 총 7개로 PrePersist, PreUpdate, PreRemove, PostPersist, PostUpdate, PostRemove, PostLoad 등이 제공 되며 모두 Annotation 기반으로 사용되기 때문에 변수 명 설정은 자유롭습니다

 

각각의 Listener 등을 설명 드리자면

@PrePersist insert 메소드가 실행되기 전에 실행되는 Annotation
@PreUpdate merge 메소드가 실행되기 전에 실행되는 Annotation
@PreRemove Delete 메소드가 실행되기 전에 실행되는 Annotation
@PostPersist Persist 메소드가 실행되기 전에 실행되는 Annotation
@PostUpdate merge 메소드가 호출이 이후에 실행되는 Annotation
@PostRemove Delete 메소드가 호출이 이후에 실행되는 Annotation
@PostLoad SELECT 조회가 일어난 직후에 실행되는 Annotation

Pre 가 들어간 경우에는 해당 메소드가 실행되기 전에 실행되는 Annotation으로 간단하게 정리가 되고 Post는 PostPersist를 제외하면

나머지 는 메소드가 호출이 되거나 SELECT 조회가 일어난 직후에 실행되는 Annotation임을 알 수 있습니다

@Data
@Entity
@AllArgsConstructor
@NoArgsConstructor
@RequiredArgsConstructor
public class Users{

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @NonNull
    private String name;

    @NonNull
    private String email;

    // 이벤트
    @PrePersist     // insert 메소드가 실행되기 전에 실행되는 Annotation
    public void prePersist(){
        System.out.println("prePersist");
    }

    @PostPersist    // Persist 메소드가 실행되기 전에 실행되는 Annotation
    public void postPersist(){
        System.out.println(">>> postPersist");
    }

    @PreUpdate      // merge 메소드가 실행되기 전에 실행되는 Annotation
    public void preUpdate(){
    }

    @PostUpdate     // merge 메소드가 호출이 된 이후에 실행되는 Annotation
    public void postUpdate(){
        System.out.println(">>> postUpdate");
    }

    @PreRemove      // Delete 메소드가 실행되기 전에 실행되는 Annotation
    public void preRemove(){
        System.out.println(">>> preRemove");
    }

    @PostRemove     // Delete 메소드가 호출이 된 이후에 실행되는 Annotation
    public void postRemove(){
        System.out.println(">>> postRemove");
    }

    @PostLoad       // SELECT 조회가 일어난 직후에 실행되는 Annotation
    public void postLoad(){
        System.out.println(">>> postLoad");
    }

}

그래서 어떻게 나올지 궁금해서 위에 처럼 로그를 찍어보면 어느 시점에서 로그가 찍히는지 아실 수 있습니다

 

감사합니다