본문 바로가기
Spring

JPA Auditing

by windy7271 2022. 7. 27.
728x90
반응형

entitiy 에는 해당 데이터의 생성시간과 수정시간을 포함한다.

차후 유지보수에 있어 중요한 정보이기 때문이다.

 

매번 DB에 삽입, 생성 전 날짜 데이터를 등록. 수정하는 코드가 여기 저기 들어간다.

 

public class BlogTest {
    public void Auditing_test() {
        Auditing_test(new LocalDate())
        postsRepositor.save(posts);
    }
}

 

 

이런 단순 반복 코드가 모든 테이블과 서비스 메소드에 포함 되어야 한다.

해결방안 : JPA Auditing 사용

 

@Getter
@MappedSuperclass // BaseTimeEntity 을 상속할 경우 필드들을 칼럼으로 인식함
@EntityListeners(AuditingEntityListener.class) // BaseTimeEntity 에 auditing 기능을 포함시 , 해당 데이터를 보고 있다가 생성 또는 수정이 발생하면 자동으로 값을 넣어
public abstract class BaseTimeEntity { // entity의 상위 클래스가 되어 entity의 date를 자동으로 관리하는 역할

    @CreatedDate // Entity 생성시 시간 자동 저장
    private LocalDateTime createDate;

    @LastModifiedDate // 변경시 자동 저장
    private LocalDateTime modifiedDate;
}

// Posts 클래스가 BaseTimeEntity 상속받도록함
// JPA Auditing 활성화 어노테이션 추가

 

@Test
public void BaseTimeEntity_등록() {
    LocalDateTime now = LocalDateTime.of(2019, 6, 4, 0, 0, 0);
    postsRepository.save(Posts.builder()
            .title("title")
            .content("content")
            .author("author")
            .build());

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

    Posts posts = postsList.get(0);

    System.out.println("createDate = " + posts.getCreateDate() + ", modifiedDate=" + posts.getModifiedDate());
    Assertions.assertThat(posts.getCreateDate()).isAfter(now);
    Assertions.assertThat(posts.getModifiedDate()).isAfter(now);
}

 

앞으로 추가되는 엔티티들은 BaseTimeEntity 상속받으면 해결

반응형

댓글