본문 바로가기

Spring Data JPA

3월 23일 SpringDataJPA Auditing

Auditing

테이블을 만들때 등록일 , 수정일을 꼭 남겨주어야한다.

엔티티를 생성, 변경시 추적을 위해서

등록일, 수정일 , 등록자 , 수정자를 꼭 남겨야 한다.

 

순수 JPA 사용

1.시간기록데이터 엔티티 생성

@MappedSuperClass //해당 엔티티의 필드를 다른 엔티티에서 가져다 쓸수 있게 한다.

@Getter

public class JPABaseEntity{

 @Column(updatable = false , insertable = true) // 수정 등록시 데이터 변경 여부

 private LocalDateTime createdDate();

 private LocalDAteTime updatedDate();

 

//@PrePersist 는 영속화 되기 직전

//@PostPersist 는 영속화 되고난 후

@Prepersist

public void prePersist(){

 LocalDateTime now = LocalDateTime.now();

 this.createdDate = now;

 this.updatedDate = now;

}

 

//@PreUpdate 는 업데이트 되기 전

//@PostUpdate 는 업데이트 되고난 후

@PreUpdate

public void preUpdate(){

updatedDate = LocalDateTime.now();

}

 

}

 

2.사용

사용할 엔티티에 extends 받기

public class Member extends JPABaseEntity()

 

3.실제 호출

<TEST>

memberRepository.save(member);

//prePersist 작동시점 , 이때 값이 들어간다.

 

스프링 데이터 JPA 사용

1.시간 기록 데이터 엔티티 생성

@EntityListeners(AuditingEntityListener.class) //꼭 넣어주어야 한다

@MappedSuperClass

@Getter

public class BaseEntity{

 @CreatedDate  //AuditingEntityListener 가 있어야 작동하는 기능으로 생성되는 시점의 데이터를 받아온다.

 @Column(updatable = false , insertable = true)

 private LocalDateTime createdDate;

 

 @LastModifiedDate // 수정될때

 private LocalDateTime lastMotifiedDate;

 

 @CreatedBy //생성될 때 마다.

 @Column(updatable = false)

 private String createdBy

 

 @LastModifiedBy //수정될 때 마다

 private String lastModifiedBy

 

 //위 기능들은 모두 @EnableJPAAuditing 이 필수다,

@Bean

public AuditorAware<String> 에서 값을 가져온다.

 

2.UUID 값 생성

<Data JPA Application>

@EnableJPAAuditing //꼭 넣어주어야 한다.

@SpringBootApplication

 

@Bean

public AuditorAware<String> auditorProvider(){

 return () -> Optional.of(UUID,randomUUID(),toString())

}

 

사용법은 순수 JPA와 동일

이 방법을 사용하여 엔티티에 생성 , 수정 , 기록을 남길 수 있다.

 

 

 

}