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); }
잘 성공하는 모습을 볼 수 있다.
Uploaded by Notion2Tistory v1.1.0