포스트

[TIL] 스프링 입문 - JPA Auditing 적용

JPA Auditing으로 Entity의 생성일과 수정일을 자동 관리하는 방법을 정리한 TIL입니다.

For the English version of this post, see here.
[TIL] 스프링 입문 - JPA Auditing 적용

오늘 할 일

공부한 내용

JPA Auditing 적용

Timestamped

  • Spring Data JPA에서는 시간에 대해서 자동으로 값을 넣어주는 기능인 JPA Auditing을 제공하고 있음
    • 데이터의 생성(created_at), 수정(modified_at) 시간은 다양한 데이터에 매우 자주 활용됨
    • 각각의 Entity의 생성 수정 시간을 매번 작성하는 건 비효율적
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      
      @Getter
      @MappedSuperclass
      @EntityListeners(AuditingEntityListener.class)
      public abstract class Timestamped {
      
      @CreatedDate
      @Column(updatable = false)
      @Temporal(TemporalType.TIMESTAMP)
      private LocalDateTime createdAt;
      
      @LastModifiedDate
      @Column
      @Temporal(TemporalType.TIMESTAMP)
      private LocalDateTime modifiedAt;
      }
      
  • @MappedSuperclass: JPA Entity 클래스들이 해당 추상 클래스를 상속할 경우 createdAt, modifiedAt 처럼 추상 클래스에 선언한 멤버변수를 컬럼으로 인식할 수 있음
  • @EntityListeners(AuditingEntityListner.class): 해당 클래스에 Auditing 기능을 포함시켜줌
  • @CreateDate: Entity 객체가 생성되어 저장될 때 시간이 자동으로 저장됨
    • 최초 생성 시간이 저장되고 그 이후에는 수정되면 안되기 때문에 update = false 옵션을 추가함
  • @LastModifiedDate: 조회한 Entity 객체를 값을 변경할 때 변경된 시간이 자동으로 저장됨
    • 처음 생성 시간이 저장된 이후 변경이 일어날 때마다 해당 변경시간으로 업데이트됨
  • @Temporal: 날짜 타입(java.util.Date, java.util.Calender)을 매핑할 때 사용함
    • DB에는 Date(날짜), Time(시간), Timestamp(날짜와 시간)라는 세 가지 타입이 별도로 존재함

@SpringBootApplication이 있는 class에 @EnableJpaAuditing 추가!

  • JPA Auditing 기능을 사용하겠다는 정보를 전달해주기 위해 @EnableJpaAuditing을 추가해야함

문제 & 오류

내일 할 일