이전 포스팅에 이어서 이번에는 JPA Auditing 사용해 생성시간과 수정시간을 자동화해보겠습니다.
JPA Auditing을 쓰는 이유?
- 생성시간과 수정시간은 데이터베이스의 공통적인 칼럼입니다. 그래서 매번 데이터베이스에 insert/update 할 때 날짜 데이터를 생성, 수정하는 코드를 포함해야 합니다. 이 코드가 여러 테이블과 메소드에 포함되기 때문에 반복적인 코드가 많아집니다. 이 반복적인 코드를 줄이기 위해 JPA Auditing을 사용하는 것입니다. JPA Auditing을 사용하면 자동으로 시간을 매핑하여 데이터베이스의 테이블에 넣어줍니다.
1. 다음과 같이 파일을 만들어줍니다
2. BaseTimeEntity
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseTimeEntity {
@CreatedDate
private LocalDateTime createdDate;
@LastModifiedDate
private LocalDateTime modifiedDate;
}
@MappedSuperclass - Entity클래스들이 BaseTimeEntity를 상속할 경우 필드들(createdDate, modifiedDate)을 칼럼으로 인식하도록 합니다.
@EntityListeners(A@CreatedDateuditingEntityListener.class) - 이 클래스에 Auditing 기능을 포함시킵니다
@CreatedDate - Entity가 생성되어 저장될 때 자동으로 시간이 저장됩니다
@LastModifiedDate - Entity가 수정될 때 시간이 자동으로 저장됩니다
3. Application / Posts
@EnableJpaAuditing
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
@EnableJpaAuditing - JPA Auditing을 활성화해줍니다.
public class Posts extends BaseTimeEntity {
//생략
}
Posts 클래스에서 BaseTimeEntity를 상속받습니다.
4. PostsRepositoryTest - JPA Auditing 테스트
public class PostsRepositoryTest {
//생략
@Test
public void BaseTimeEntity_등록() {
//given
LocalDateTime now = LocalDateTime.of(2020,11,22,0,0,0);
postsRepository.save(Posts.builder()
.title("title")
.content("content")
.author("author")
.build());
//when
List<Posts> postsList = postsRepository.findAll();
//then
Posts posts = postsList.get(0);
System.out.println(">>>>>>>>>>createDate=" + posts.getCreatedDate() + ", modifiedDate=" + posts.getModifiedDate());
assertThat(posts.getCreatedDate()).isAfter(now);
assertThat(posts.getModifiedDate()).isAfter(now);
}
}
assertThat(posts.getCreatedDate()).isAfter(now); - now보다 posts의 createdDate가 미래이면 true리턴, 그렇지 않으면 false를 리턴합니다.
'Back-end > Spring' 카테고리의 다른 글
[SpringBoot] 2주차 스터디 (JPA, domain, repository, DTO, service, controller) (1) | 2021.08.28 |
---|---|
[SpringBoot] 1주차 스터디 (RestController) (0) | 2021.08.19 |
[SpringBoot] Spring Data JPA로 게시판 만들기(4) - 수정/조회 API (0) | 2020.11.22 |
[SpringBoot] Spring Data JPA로 게시판 만들기(3) - 등록 API (0) | 2020.11.16 |
[SpringBoot] Spring Data JPA로 게시판 만들기(2) - repository테스트 코드 작성 (0) | 2020.11.16 |