JPA Auditing

JPA Auditing이란?


Audit은 감시하다, 감사하다라는 뜻으로 Spring Data JPA에서 시간을 자동으로 넣어주는 기능
도메인을 영속성 컨텍스트에 저장하거나 조회를 수행한 후에 update를 하는 경우 매번 시간 데이터를 입력하여 주어야 하는데,
audit을 이용하면 자동으로 시간을 매핑하여 DB에 넣어준다.

JPA Auditing 테스트 코드


BaseTimeEntity.java

@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseTimeEntity {

      @CreatedDate
    private LocalDateTime createDate;

    @LastModifiedDate
    private LocalDateTime modifiedDate;
}

Posts.java

@Getter
@NoArgsConstructor
@Entity
public class Posts extends BaseTimeEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(length = 500, nullable = false)
    private String title;

    @Column(columnDefinition = "TEXT", nullable = false)
    private String content;
    private String author;

    @Builder
    public Posts(String title, String content, String author) {
        this.title = title;
        this.content = content;
        this.author = author;
    }

    public void update(String title, String content){
        this.title = title;
        this.content = content;
    }
}

JPA Auditing 활성화

@EnableJpaAuditing // JPA Auditing 활성화
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}    

JPA Auditing 테스트 코드

@RunWith(SpringRunner.class)
@SpringBootTest
public class PostsRepositoryTest {

    @Autowired
    PostsRepository postsRepository;
    
    // Junit에서 단위테스트가 끝날 때마다 수행되는 메소드를 지정
    @After
    public void cleanup(){
        postsRepository.deleteAll();
    }

    @Test
    public void BaseTimeEntity_등록(){
        //given
        LocalDateTime now = LocalDateTime.of(2022,5,13,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(">>>>>>>>>>>>>>> getCreateDate = " + posts.getCreateDate() +" , getModifiedDate = " + posts.getModifiedDate());
    
        Assertions.assertThat(posts.getCreateDate()).isAfter(now);
        Assertions.assertThat(posts.getModifiedDate().isAfter(now));
    }
}

참조 문헌


스프링 부트와 AWS로 혼자 구현하는 웹서비스