'스프링 부트와 AWS로 혼자 구현하는 웹 서비스'를 읽고 공부하며 정리한 내용입니다. 오류 해결부분은 틀린 내용이 있을 수 있습니다.🤐
엔티티에 생성시간과 수정시간은 차후 유지보수에 있어 굉장히 중요하다.
때문에 DB 삽입/갱신 전 날짜 데이터를 등록/수정하는 코드가 많이 들어가게 된다. 단순하고 반복적인 코드가 들어가는 것을 JPA Auditing이 해결할 수 있다.
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseTimeEntity {
@CreatedDate
private LocalDateTime createdDate;
@LastModifiedDate
private LocalDateTime modifiedDate;
}
BaseTimeEntity클래스는 모든 Entity의 상위 클래스로 Entity들의 createdDate, modifiedDate를 자동으로 관리한다.
public class Posts extends BaseTimeEntity { ... }
@EnableJpaAuditing
@SpringBootApplication
public class AwsPracticeApplication { ... }
@MappedSuperClass : JPA Entity클래스들이 BaseTimeEntity를 상속할 경우 createdDate, modifiedDate도 칼럼으로 인식하게 한다.
@EntityListeners(AuditingEntityListener.class) : BaseTimeEntity 클래스에 Auditing 기능을 포함한다.
@CreatedDate : Entity가 생성되어 저장될 때 시간이 자동 저장된다.
@LastModifiedDate : 조회한 Entity 값을 변경할 때 시간이 자동 저장된다.
@Test
public void BaseTimeEntity_등록() {
//given
LocalDateTime now = LocalDateTime.of(2019, 6, 4, 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);
}