실무에서 사용하다보면 유지보수를 위해 등록/수정일, 등록/수정자에 대한 값을 DB에 저장해줘야한다.
순수 JPA로 구현할 순 있지만, Spring Data-JPA를 사용하면 더 간결하게 사용할 수 있다.
왜 시간과 등록/수정자를 구분지은 것인가 ? >> 시간은 거의 모든 곳에서 사용하지만, 등록자&수정자는 사용하는 부분이 있을수도 없을수도 있기 때문.
시간만 사용한다면 Entity에 BaseTimeEntity만 상속하고, 등록자+시간 포함하려면 BaseENtity를 상속해주면 되겠지 ?
@EntityListeners(AuditingEntityListener.class)
//이런 공통 엔티티가 많은 경우 META-INF 에 META-INF/orm.xml를 넣어준다. >> 전체적용
@MappedSuperclass
@Getter
public class BaseEntity extends BaseTimeEntity{
@CreatedBy
@Column(updatable = false)
private String createdBy;
@LastModifiedBy
private String lastModifiedBy;
}
-BaseTimeEntity.java
@EntityListeners(AuditingEntityListener.class) //이런 공통 엔티티가 많은 경우 META-INF 에 META-INF/orm.xml를 넣어준다. >> 전체적용
@MappedSuperclass
@Getter
public class BaseTimeEntity {
@CreatedDate
@Column(updatable = false)
private LocalDateTime createdDate;
@LastModifiedBy
private LocalDateTime getLastModifiedDate;
}
-DataApplication.java
DataJpaApplication에 @Bean으로 AuditorAware를 생성하여 적용한다. 현재는 그냥 랜덤값으로 넣어주었지만 실무에서는 시큐리티를 사용하여 세션 등을 넣어줘야함.
@SpringBootApplication
public class DataJpaApplication {
public static void main(String[] args) {
SpringApplication.run(DataJpaApplication.class, args);
}
@Bean
public AuditorAware<String> auditorProvider(){
return () -> Optional.of(UUID.randomUUID().toString());
}
}