[스프링] JPA 리스너

JPA(Java Persistence API)에서 엔티티 생명주기 이벤트를 감지하고 처리하기 위해 엔티티 리스너(Entity Listener)를 사용할 수 있습니다. 엔티티 리스너를 통해 엔티티가 영속화, 갱신, 삭제되는 이벤트를 캐치하여 처리할 수 있습니다.

엔티티 리스너 구현

JPA에서 엔티티 리스너를 구현하는 방법은 다음과 같습니다.

  1. 엔티티 리스너 클래스를 작성합니다.
  2. @EntityListeners 어노테이션을 통해 해당 엔티티에 리스너 클래스를 등록합니다.

아래는 엔티티 리스너를 구현하는 간단한 예제 코드입니다.

@EntityListeners(AuditListener.class)
public class AuditEntity {
    // 엔티티 필드 및 메서드

    @PrePersist
    public void onPrePersist() {
        // 영속화 전 처리 로직
    }

    @PostPersist
    public void onPostPersist() {
        // 영속화 후 처리 로직
    }

    @PreUpdate
    public void onPreUpdate() {
        // 갱신 전 처리 로직
    }

    @PostUpdate
    public void onPostUpdate() {
        // 갱신 후 처리 로직
    }

    @PreRemove
    public void onPreRemove() {
        // 삭제 전 처리 로직
    }

    @PostRemove
    public void onPostRemove() {
        // 삭제 후 처리 로직
    }
}

public class AuditListener {
    @PrePersist
    public void onPrePersist(AuditEntity entity) {
        // 영속화 전 처리 로직
    }

    @PostPersist
    public void onPostPersist(AuditEntity entity) {
        // 영속화 후 처리 로직
    }

    @PreUpdate
    public void onPreUpdate(AuditEntity entity) {
        // 갱신 전 처리 로직
    }

    @PostUpdate
    public void onPostUpdate(AuditEntity entity) {
        // 갱신 후 처리 로직
    }

    @PreRemove
    public void onPreRemove(AuditEntity entity) {
        // 삭제 전 처리 로직
    }

    @PostRemove
    public void onPostRemove(AuditEntity entity) {
        // 삭제 후 처리 로직
    }
}

위 코드에서 AuditEntity 엔티티에 엔티티 리스너를 등록하고, 해당 엔티티의 생명주기 이벤트에 대한 처리 로직을 AuditListener 클래스에 구현하였습니다.

리스너를 사용하여 처리

리스너를 사용하면 엔티티 생명주기 이벤트에 특정 로직을 적용할 수 있습니다. 예를 들어, 생성일, 수정일을 자동으로 업데이트하는 등의 비즈니스 로직을 구현할 수 있습니다.

엔티티 리스너를 통해 엔티티의 생명주기를 감지하고 원하는 동작을 수행할 수 있습니다. 실무에서는 엔티티 리스너를 적절히 활용하여 엔티티의 상태 변경에 대한 처리를 효과적으로 구현할 수 있습니다.

참고 문헌