@EntityListeners @MappedSuperClass @CreatedDate @Column(updatable = false) 어노테이션
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로 해주는 것을 권장한다.
[배워보자 Spring Data JPA] JPA Auditing 기능을 사용해서 생성, 수정 일자 자동화하기
해당 글은 배워보자 Spring Data JPA 시리즈 입니다. 해당 시리즈의 내용이 이어지는 형태이므로 글의 내용 중에 생략되는 말들이 있을 수 있으니, 자세한 사항은 아래 링크를 참고해주세요! Spring Dat
wonit.tistory.com