개발을 하다보면 테이블마다 공통적으로 들어가는 데이터가 있습니다. 이걸 모든 엔티티마다 생성하는 방법도 있지만 오늘은 JPA의 Auditing이란 기술을 써보려고 합니다.

main에 꼭 @EnableJpaAuditing를 작성해줘야 합니다.

@SpringBootApplication
@EnableJpaAuditing
public class AwsSpringbootWebserviceApplication {

    public static void main(String[] args) {
        SpringApplication.run(AwsSpringbootWebserviceApplication.class, args);
    }

}

abstract class BaseTimeEntity 작성

  • 이 클래스를 상속 받은 자식 클래스엔 자동으로 createdAt, modifiedAt이 생깁니다.
    @Getter
    @MappedSuperclass
    @EntityListeners(AuditingEntityListener.class)
    public abstract class BaseTimeEntity {
    @CreatedDate
    private LocalDateTime createdAt;
    
    @LastModifiedDate
    private LocalDateTime modifiedAt;
    }
    

Test

BaseTimeEntity는 엔티티이기 때문에 repository를 테스트할겁니다.

@SpringBootTest
class PostRepositoryTest {

    @Autowired
    PostsRepository postsRepository;

    @AfterEach
    public void clean(){
        postsRepository.deleteAll();
    }
    
    // ...
  
    @Test
    public void BaseTimeEntity_등록(){
        //given
        LocalDateTime now = LocalDateTime.of(2023,10,12,0,0,0);
        postsRepository.save(Posts.builder()
                .title("시간 테스트 게시글")
                .content("시간 테스트 게시글 본문")
                .author("jojoldu@gmail.com")
                .build());

        //when
        List<Posts> postsList = postsRepository.findAll();

        //then
        Posts posts = postsList.get(0);

        System.out.println("post createdAt" + posts.getCreatedAt());
        System.out.println("post modifiedAt" + posts.getModifiedAt());

        assertThat(posts.getCreatedAt()).isAfter(now);
        assertThat(posts.getModifiedAt()).isAfter(now);

    }

}

댓글남기기