본문 바로가기

Language/Spring

JpaAuditing 사용 방법 및 예제

JpaAuditing이란 엔티티의 생성 시각, 수정 시각을 자동으로 기록해주는 것

 

@EnableJpaAuditing 어노테이션

@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
@EnableJpaAuditing
public class PlayheavenApplication {
    public static void main(String[] args) {
        SpringApplication.run(PlayheavenApplication.class, args);
    }

}

해당 어노테이션으로 Auditing 기능을 활성화 해주어야 하며, Application 클래스 또는 @Configuration을 붙인 클래스 위에 선언해주어야 함

 

Auditing에 필요한 어노테이션

@MappedSuperclass

  • 공통 매핑 정보가 필요할 때, 부모 클래스에 선언된 필드를 상속받는 클래스에서 그대로 사용할 때 사용
  • 부모 클래스에 대한 테이블은 별도로 생성되지 않음

 

@EntityListeners

  • Auditing기능을 사용할 클래스 위에 선언해주고, 이 클래스는 Spring Data JPA에서 제공하는 이벤트 리스너로 엔티티의 영속, 수정 이벤트를 감지하는 역할을 수행
  • 해당 어노테이션은 엔티티의 변화를 감지하여 엔티티와 매핑된 테이블의 데이터를 조작
  • 이 어노테이션의 파라미터에 이벤트 리스너인 AuditingEntityListener 클래스를 넣어줌

@CreateDate

  • 생성일을 기록하기 위해 LocalDateTime 타입의 필드에 @CreateDate 를 적용
  • 생성일자는 수정되어서는 안되므로 @Column(updatable = false)를 사용하여 수정이 되지 않도록 제어

 

@LastModifiedDate

  • 수정일을 기록하기 위해 LocalDateTime 타입의 필드에 @LastModifiedDate 를 적용
  • 엔티티가 수정됨을 감지할 경우 그 시점을 해당 필드에 기록
@EntityListeners(AuditingEntityListener.class)
@MappedSuperclass
@Getter
public class BaseTime {
    @CreatedDate
    @Column(updatable = false)
    private LocalDateTime createAt;

    @LastModifiedDate
    private LocalDateTime modifyAt;
}

 

@Entity
@Getter
public class Member extends BaseTime {
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String email;
    private String password;
    private String name;
    private String phone;
    private boolean isDeleted;
}