ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • createdAt의 저장(Auditing)
    JPA 2023. 3. 30. 02:00

    프로젝트를 수행하면서 사용했던 코드이다.

    엔티티 생성, 수정 시간을 기록하는 필드에 대해 알아보자.

     

    @Getter
    @EntityListeners(AuditingEntityListener.class)
    @MappedSuperclass
    public class BaseTimeEntity {
    
        @CreatedDate
        @Column(nullable = false, updatable = false)
        private LocalDateTime createdDate;
    
        @LastModifiedDate
        @Column(nullable = false)
        private LocalDateTime modifiedDate;
    }

     

    @Entity
    @Getter
    @NoArgsConstructor
    @Builder
    @AllArgsConstructor
    public class Member extends BaseTimeEntity{
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
    
        private String password;
        ...
        이하 생략
        }

     

    각 엔티티에 생성, 수정 시간을 기록하기 위해 Auting을 사용하려고 했다.   

    엔티티가 너무 많아지면 일일히 필드에 추가하기 번거로우니 BaseEntity를 만들고 여기에 생성, 수정시간을 기록하는 필드를 만들었다. 

    @CreatedDate & @LastModifiedDate

    @CreatedDate는 엔티티 생성 시 특정 필드를 자동으로 데이터베이스에 매핑해주기 위해 사용한다.
    그런데 아무런 설정 없이 @CreatedDate 어노테이션만 붙이면 다음과 같은 에러가 발생하거나 NULL이 저장된다.

    not-null property references a null or transient value createddate

     

    다음과 같은 설정이 필요하다.

    • SpringApplication에 @EnableJpaAuditing 붙이기
    • 콜백 요청을 원하는 엔티티에 @EntityListeners(AuditingEntityListener.class) 붙이기

     

     

    @EntityListeners

    엔티티를 DB에 적용하기 이전에 콜백을 요청할 수 있는 어노테이션




    AuditingEntityListener

    • Auditing이란 감시하다라는 뜻이다.

    • 엔티티를 영속성 컨텍스트에 저장하거나 수정한 후 update하는 경우
      자동으로 auditor, time을 매핑하여 DB에 넣도록 도와준다.

    • 스프링 부트의 엔트리 포인트인 실행 클래스에 @EnableJpaAuditing을 적용하여 JPA Auditing을 활성화 해야한다.

    위 설정들을 마치면 엔티티에 따로 createdAt과 updatedAt을 set 하지 않아도 자동으로 DB에 저장된다.

    728x90

    댓글

Designed by Tistory.