Programming/Spring

JPA Auditing으로 생성일/수정일 자동화하기

사랑우주인 2021. 2. 5. 01:13

보통 엔티티는 해당 데이터의 생성시간과 수정시간을 포함한다. 

그래서 매번 DB에 insert하기 전, update하기 전에 날짜 데이터을 등록/수정하는 코드가 여기저기 들어간다. 

// 생성일 추가 코드 예제
public void savePosts() {
  ...
  posts.setCreateDate(new LocalDate());
  postsRepository.save(posts);
  ...
}

이런 단순하고 반복적인 코드가 모든 테이블과 서비스 메서드에 포함되어야 한다고 생각하면 매우 귀찮고 코드가 지저분해진다. 이 문제를 해결할 수 있는 것이 JPA Auditing이다. 

 

적용하기


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

    @CreatedDate
    private LocalDateTime createdDate;

    @LastModifiedDate
    private LocalDateTime modifiedDate;

    public LocalDateTime getCreatedDate() {
        return createdDate;
    }

    public LocalDateTime getModifiedDate() {
        return modifiedDate;
    }
}

먼저 BaseTimeEntity 클래스를 만듭니다.
이 클래스는 모든 Entity의 상위 클래스가 되어 Entity 들의 createdDate, modifiedDate를 자동으로 관리하는 역할이다.

 

  • @MappedSuperclass : JPA Entity 클래스들이 BaseTimeEntity를 상속할 경우 필드들(createdDate, modifiedDate)도 칼럼으로 인식하도록 한다.
  • @EntityListeners(AuditingEntityListener.class): BaseTimeEntiy 클래스에 Auditing 기능을 포함시킨다.
  • @CreatedDate: Entity가 생성되어 저장될 때 시간이 자동 저장된다.
  • @LastModifiedDate: 조회한 Entity의 값을 변경할 때 시간이 자동 저장된다.

그리고 Order클래스가 BaseTimeEntity를 상속하도록 한다.

@Entity
@Table(name = "ORDERS")
public class Order extends BaseTimeEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    public Order() {
    }
}

 

 

마지막으로 JPA Auditing 어노테이션들을 모두 활성화할 수 있도록 Application 클래스에 활성화 어노테이션을 추가한다.

@EnableJpaAuditing
@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(CaffeineApplication.class, args);
    }
}
  • @EnableJpaAuditing: JPA Auditing을 활성화 하기 위한 어노테이션이다.