웹개발/SpringFramework

JPA Auditing - Entity 관리

RBWSN 2021. 10. 21. 09:50
728x90

 

JPA Auditing 은 하나의 Entity 클래스로 이것을 상속받은 모든 Entity에 이 코드를 추가 시켜준다.

 

반복적인 코드가 모든 테이블과 서비스 메소드에 포함되면 지저분해지기 때문이다.

 

이시간에는 CreateTime 과 UpdateTime을 입력해주도록 하겠다.

 

먼저 BaseTimeEntity 클래스를 생성해준다.

 

 

package com.example.demo.domain;  import lombok.Getter; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener;  import javax.persistence.EntityListeners; import javax.persistence.MappedSuperclass; import java.time.LocalDateTime;  @Getter @MappedSuperclass @EntityListeners(AuditingEntityListener.class) public abstract class BaseTimeEntity {      @CreatedDate     private LocalDateTime createdDate;      @LastModifiedDate     private LocalDateTime modifiedDate; }

 

이렇게 베이스타입을 넣어준다.

먼저 MappedSuperclass는 Entity 클래스들이 이 BaseTimeEntity를 상속 할 경우 이것의 필드들을 칼럼으로 인식하도록 합니다.

@EntityListeners(AuditingEntityListener.class)

는 이 클래스에 Auditing 기능을 포함시킵니다.

 

이제 다른클래스에서 extends로 상속을 해줍니다.

 

그리고 메인인 Application 에 JPA Auditing 기능을 활성화 해줍니다.

 

package com.example.demo;  import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.data.jpa.repository.config.EnableJpaAuditing;  @EnableJpaAuditing @SpringBootApplication public class DemoApplication {      public static void main(String[] args) {         SpringApplication.run(DemoApplication.class, args);     }  }

 

그리고 이제 확인되는지 테스트 코드를 작성해보면 된다.

 

@Test     public void BaseTimeCheck(){         LocalDateTime localDateTime = LocalDateTime.of(2021,10,21,0,0,0);         postsRepository.save(Posts.builder().title("title")                 .content("content").                 author("aa@naver.com").build());          List<Posts> postsList = postsRepository.findAll();          assertThat(postsList.get(0).getCreatedDate()).isAfter(localDateTime);         assertThat(postsList.get(0).getModifiedDate()).isAfter(localDateTime);       }

 

잘 성공하는 모습을 볼 수 있다.

 

728x90