JPA @EnableJpaAuditing

아이스__아메리·2022년 11월 17일
0

JPA

목록 보기
15/18

만약 궁금하다면 @PrePersist, @PostPersist, @PreUpdate, @PostUpdate 키워드로 찾아볼 것

생성일/수정일/생성자를 자동화할 때 사용하는게 바로 JPA Auditing

@EnableJpaAuditing 사용하기

Spring Data JPA 에서 JPA 를 사용하기 위해서는 SpringBoot 설정 클래스에 @EnableJpaAuditing 을 적어줘야한다.

Auditing을 할 필드를 갖는 기본 엔티티를 생성하기

@Getter
@EntityListeners(AuditingEntityListener.class)
@MappedSuperclass
public class TimeBaseEntity {

    ZoneId zoneId = ZoneId.of("Asia/Seoul");

    @CreatedDate
    @Column(updatable = false)
    private ZonedDateTime createdAt;

    @LastModifiedDate
    private ZonedDateTime modifiedAt;

}
  1. @EntityListeners(AuditingEntityListener.class)

엔티티를 DB에 적용하기 전, 이후에 커스텀 콜백을 요청할 수 있는 어노테이션이다.
부모 클래스(엔티티)에 필드를 선언하고 단순히 속성만 받아서 사용하고싶을 때 사용하는 방법이다.

  1. @MappedSuperClass

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

  1. @CreatedDate

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

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

적용

@Getter
@EntityListeners(AuditingEntityListener.class)
@MappedSuperclass
public class TimeBaseEntity {

    ZoneId zoneId = ZoneId.of("Asia/Seoul");

    @CreatedDate
    @Column(updatable = false)
    private ZonedDateTime createdAt;

    @LastModifiedDate
    private ZonedDateTime modifiedAt;

}
public class User extends BaseEntity{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String username;
    private String address;
    private int age;
}

auditor 설정시 main문으로 넣어서 추가하면 향후 Mock 테스트할 때 오류가 날 수 있다.
@Configuration 자바 파일 분리하여 적용한다.

@Configuration
@EnableJpaAuditing
public class JpaConfig {
}

#1

#2

profile
츠케멘 좋아

0개의 댓글