스터디를 통해 스프링부트와 AWS로 혼자 구현하는 웹 서비스(저자 이동욱) 서적을 공부하는 중입니다.
공부/실습한 내용을 정리한 포스팅입니다.
책에 모르는 부분이 있으면 구글링하거나 챗gpt에 물어봐서 보충하였습니다.
(아직 초보라 모르는 부분이 많아 이것저것 다 적었습니다.)
참고한 사이트 출처는 포스팅 맨 하단에 적었습니다.
차후 유지보수를 위해 Entity에 해당 데이터의 생성시간과 수정시간을 포함.
JPA Auditing을 통해서 매번 DB 삽입/갱신 전에 넣는 날짜 데이터 등록/수정 코드를 굳이 쓰지 않아도 되게 만듦.
LocalDate
,LocalDateTime
등장.Date
/ Calendar
문제점Java8 이전에 쓰여짐.
Calendar
의 경우, 월 설계가 잘못됨. : 1월이 0부터 시작BaseTimeEntity
클래스domain
패키지에 생성 후 아래와 같이 코드 작성.
그리고 다른 Entity 클래스가 BaseTimeEntity
상속하도록 변경
package com.webservice.springboot.springboot_board.domain.posts;
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
: JPA Entity 클래스들이 BaseTimeEntity 상속 시 필드들을 모두 칼럼으로 인식하도록 함.@EntityListeners(AuditingEntityListener.class)
: BaseTimeEntity 클래스에 Auditing 기능 포함.@CreatedDate
: Entity 생성되어 저장 시 시간 자동 저장.@LastedModifiedDate
: 조회 Entity 값 변경 시 시간 자동 저장.※ @EntityListeners
: JPA Entity에서 이벤트가 발생할 때마다 특정 로직을 실행시킬 수 있음. Entity의 변화를 감지하고 데이블의 데이터를 조작하는 일을 함.
Application
클래스에 @EnableJpaAuditing
추가.PostsRepositoryTest.java에 추가
@Test
public void BaseTimeEntity_등록(){
//given
LocalDateTime now = LocalDateTime.of(2023,7,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);
}
JPA Auditing 기능이란?
Spring boot :: JPA @EntityListeners 정리
[Spring JPA] Entity Listener