Back-end/Spring

[SpringBoot] Spring Data JPA로 게시판 만들기(5) - JPA Auditing으로 생성시간/수정시간 자동화

poppy 2020. 11. 22. 14:50
반응형

이전 포스팅에 이어서 이번에는 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를 리턴합니다.

반응형