엔티티를 생성, 변경할 때 변경한 사람과 시간을 추적하고 싶으면?
등록일/수정일 , 등록자/수정자를 등록시켜주자!
- MainApplication에 @EnableJpaAuditing Annotation 추가 한다.
- BaseEntity에 @EntityListeners(AuditingEntityListener.class) 추가
아래와 같이 작성 가능하다.
@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;
@LastModifiedDate
private String lastModifiedBy;
}
이때 시간은 LocalDateTime은 now로 자동으로 삽입이 가능하지만 등록자/수정자는 자동으로 어떻게 삽입될까??
→ AuditorAware 이용!
MainApplication.java에 아래 Bean 주입
// 작성자나 수정자를 자동으로 등록한다.
@Bean
public AuditorAware<String> auditorProvider(){
// 만약 springsecurity 사용시에는 session이나 저장된 곳에서 유저정보를 가져와야함
return () -> Optional.of(UUID.randomUUID().toString());
// 람다를 안쓰면 아래 처럼 작성한다.(인터페이스에서 메소드 하나면 람다로 변경 가능)
/*return new AuditorAware<String>() {
@Override
public Optional<String> getCurrentAuditor() {
return Optional.of(UUID.randomUUID().toString());
}
}*/
}
만약 등록자/수정자는 필요없고 등록일/수정일 데이터만 필요하다면?
등록일/수정일은 BaseTimeEntity로 최상위에 두고
등록자/수정자는 BaseTimeEntity를 상속받는 BaseEntity로 만든다
따라서 시간 관련만 필요한 사람들은 BaseTimeEntity를 사용하고, 등록자/수정자까지 필요한사람은 BaseEntity를 사용하도록 한다.
BaseTimeEntity.java
@EntityListeners(AuditingEntityListener.class)
@MappedSuperclass
@Getter
public class BaseTimeEntity{
@CreatedDate
@Column(updatable = false)
private LocalDateTime createdDate;
@LastModifiedDate
private LocalDateTime lastModifiedDate;
}
BaseEntity.java
@EntityListeners(AuditingEntityListener.class)
@MappedSuperclass
@Getter
public class BaseEntity extends BaseTimeEntity{
@CreatedBy
@Column(updatable = false)
private String createdBy;
@LastModifiedDate
private String lastModifiedBy;
}
'JAVA' 카테고리의 다른 글
[JAVA] Querydsl 설정 (0) | 2022.03.03 |
---|---|
[JAVA] web 확장 - 페이징과 정렬 (0) | 2022.03.03 |
[JAVA] 벌크성 수정 쿼리와 @EntityGraph (0) | 2022.02.23 |
[JAVA] Spring data JPA 페이징과 정렬 (1) | 2022.02.17 |
[JAVA] return type(Optional) (0) | 2022.02.16 |