1. 사용 배경
📌 등록일, 수정일, 등록자, 수정자
2. spring data jpa 사용 예시
@EnableJpaAuditing
@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());
//실제는 세션정보 받아서 아이디 꺼내서 정보를 넣어줘야함
}
}
@EntityListeners(AuditingEntityListener.class)
@MappedSuperclass
@Getter
public class BaseEntity {
@CreatedDate
@Column(updatable = false)
private LocalDateTime createdDate;
@LastModifiedDate
private LocalDateTime lastModifiedDate;
@CreatedBy
@Column(updatable = false)
private String createdBy;
@LastModifiedBy
private String lastModifiedBy;
}
[참고] 등록일/수정일은 모든 엔티티에 공통적이지만 만약 등록자/수정자는 필요 없다면?
- BaseEntity(등록자/수정자)과 BaseTimeEntity(등록일/수정일) 분리하여 원하는 타입을 선택해서 상속
public class BaseTimeEntity {
@CreatedDate
@Column(updatable = false)
private LocalDateTime createdDate;
@LastModifiedDate
private LocalDateTime lastModifiedDate;
}
public class BaseEntity extends BaseTimeEntity {
@CreatedBy
@Column(updatable = false)
private String createdBy;
@LastModifiedBy
private String lastModifiedBy;
}
[참고] 최초 저장시점에 수정일/수정자를 꼭 저장해야할까?
- 데이터 중복저장이라는 생각이 들수도 있지만 이렇게 해두면 유지보수 관점에서 매우 편리
- 또한 변경 컬럼이 null로 들어가게되면 등록 컬럼을 또 찾아야하므로 번거로움
- 저장시점에 저장데이터만 딱 입력하고싶다면 @EnableJpaAuditing(modifyOnCreate = false) 옵션 사용