개발/JPA

@EntityListeners @MappedSuperClass @CreatedDate @Column(updatable = false) 어노테이션

멋진놈 2022. 7. 21. 16:14
728x90

JPA의 기본 테이션들은  JPA의 시작과 동시에 끝이라고함.

 

 

@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
@Audited
public abstract class BaseTimeEntity {

    @CreatedDate //생성할 때 자동저장
    private LocalDateTime createdDate;

    @LastModifiedDate //수정할 때 자동저장
    private LocalDateTime modifiedDate;
}

@MappedSuperClass

@MappedSuperClass 은 엔티티의 공통 매핑 정보가 필요할 때 주로 사용한다.

 

즉, 부모 클래스(엔티티)에 필드를 선언하고 단순히 속성만 받아서 사용하고싶을 때 사용하는 방법이다.

 

우리는 BaseEntity를 생성하고 Auditing 기능이 필요한 엔티티 클래스에서 사용할 것이기 때문에 @MappedSuperClass 어노테이션을 사용하는 것이다.

 

@EntityListeners

@EntityListeners 는 엔티티를 DB에 적용하기 전, 이후에 커스텀 콜백을 요청할 수 있는 어노테이션이다.

 

@EntityListeners 의 인자로 커스텀 콜백을 요청할 클래스를 지정해주면 되는데, Auditing 을 수행할 때는 JPA 에서 제공하는 AuditingEntityListener.class 를 인자로 넘기면 된다.

 

@CreatedDate

 

@CreatedDate 어노테이션은 Spring Data JPA의 Auditing 에서 가장 흥미로운 어노테이션이다.

 

사실 이 어노테이션도 Spring Data JPA 의 고유 기능은 아니고 Spring Data 에 있는 어노테이션으로 Spring Data 에서 추상화 해놓은 것이다.

CreatedDate의 javadoc 에 나온 설명을 참고해보자.

 

Declares a field as the one representing the date the entity containing the field was created.
번) 필드를 포함하는 엔티티가 작성된 날짜를 나타내는 필드라고 선언한다.

javadoc 에 나온 내용을 보면 우리가 해당 필드를 선언하면 엔티티가 작성된 날짜, created 된 날짜를 사용할 수 있게 된다는 것이다.

 

이와 비슷한 어노테이션이 몇 개 더 존재한다.

 

  • CreatedDate
    • 해당 엔티티가 생성될 때, 생성하는 시각을 자동으로 삽입해준다.
  • CreatedBy
    • 해당 엔티티가 생성될 때, 생성하는 사람이 누구인지 자동으로 삽입해준다.
    • 생성하는 주체를 지정하기 위해서 AuditorAware<T> 를 지정해야 한다.

 

@LastModifiedDate

  • 해당 엔티티가 수정될 때, 수정하는 시각을 자동으로 삽입해준다.
  • LastModifiedBy
    • 해당 엔티티가 수정될 때, 수정하는 주체가 누구인지 자동으로 삽입해준다.
      • 생성하는 주체를 지정하기 위해서 AuditorAware<T> 를 지정해야 한다.

 

만약 궁금하다면 AuditorAware 적용 키워드로 검색해볼 것을 추천한다.

 

@Column(updatable = false)

이는 JPA의 기본 어노테이션 에서 나온 @Column과 동일하다.

 

updatable 을 왜 false 로 했을까?

 

혹시 모를 상황을 대비해서이다.

우리는 해당 BaseEntity를 JPA가 테이블에 접근하는 시점에만 JPA가 사용하도록 하고 싶은데 만약 개발자에 의해 수정되면 안되기 때문에 updatable을 false로 해주는 것을 권장한다.

 

 

https://wonit.tistory.com/484

 

[배워보자 Spring Data JPA] JPA Auditing 기능을 사용해서 생성, 수정 일자 자동화하기

해당 글은 배워보자 Spring Data JPA 시리즈 입니다. 해당 시리즈의 내용이 이어지는 형태이므로 글의 내용 중에 생략되는 말들이 있을 수 있으니, 자세한 사항은 아래 링크를 참고해주세요! Spring Dat

wonit.tistory.com