JPA Auditing으로 생성시간/수정시간 자동화하기

박지운·2023년 2월 16일
0

'스프링 부트와 AWS로 혼자 구현하는 웹 서비스'를 읽고 공부하며 정리한 내용입니다. 오류 해결부분은 틀린 내용이 있을 수 있습니다.🤐


JPA Auditing 사용 이유

엔티티에 생성시간과 수정시간은 차후 유지보수에 있어 굉장히 중요하다.
때문에 DB 삽입/갱신 전 날짜 데이터를 등록/수정하는 코드가 많이 들어가게 된다. 단순하고 반복적인 코드가 들어가는 것을 JPA Auditing이 해결할 수 있다.

BaseTimeEntity

@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)

public abstract class BaseTimeEntity {

    @CreatedDate
    private LocalDateTime createdDate;

    @LastModifiedDate
    private LocalDateTime modifiedDate;

}

BaseTimeEntity클래스는 모든 Entity의 상위 클래스로 Entity들의 createdDate, modifiedDate를 자동으로 관리한다.

적용

  • Posts클래스가 BaseTimeEnity를 상속받도록 변경한다.
public class Posts extends BaseTimeEntity { ... }
  • Application 클래스에 어노테이션 추가
@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);
    }
profile
앞길막막 전과생

0개의 댓글