포토폴리오/Spring-Boot,JPA - 쇼핑몰사이트 v2
#7. Auditing 엔티티 공통 속성 공통화
샐님
2023. 8. 4. 17:40
728x90
반응형
Auditing : Spring Data Jpa 가 제공하며 엔티티가 저장 또는 수정될 때 자동으로 등록일, 수정일, 등록자, 수정자를 입력해줍니다.
1. AuditorAware 인터페이스를 구현한 클래스를 생성합니다.
package won.shop.config;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import java.util.Optional;
public class AuditorAwareImpl implements org.springframework.data.domain.AuditorAware<String> {
@Override
public Optional<String> getCurrentAuditor() {
Authentication authentication =
SecurityContextHolder.getContext().getAuthentication();
String userId = "";
if(authentication != null){
userId = authentication.getName();
}
return Optional.of(userId);
}
}
2. Auditor 기능을 사용하기 위해 Config 파일 생성합니다.
package won.shop.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.domain.AuditorAware;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
@Configuration
@EnableJpaAuditing
public class AuditConfig {
@Bean
public AuditorAware<String> auditorProvider(){
return new AuditorAwareImpl();
}
}
3. BaseTimeEntity 를 생성해 등록,수정 시간용 도메인 생성
package won.shop.domain;
import jakarta.persistence.Column;
import jakarta.persistence.EntityListeners;
import jakarta.persistence.MappedSuperclass;
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import java.time.LocalDateTime;
@EntityListeners(value = {AuditingEntityListener.class})
@MappedSuperclass
@Getter
@Setter
public abstract class BaseTimeEntity {
@CreatedDate
@Column(updatable = false)
private LocalDateTime regTime;
@LastModifiedDate
private LocalDateTime updateTime;
}
4. BaseEntitiy 생성, BaseTimeEntity를 상속받아 등록, 수정시간 과 등록,수정한 사람용 도메인생성
package won.shop.domain;
import jakarta.persistence.Column;
import jakarta.persistence.EntityListeners;
import jakarta.persistence.MappedSuperclass;
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import java.time.LocalDateTime;
@EntityListeners(value = {AuditingEntityListener.class})
@MappedSuperclass
@Getter
public abstract class BaseEntity extends BaseTimeEntity{
@CreatedBy
@Column(updatable = false)
private String createdBy;
@LastModifiedBy
private String modifiedBy;
}
5. Member, Cart 등 기존 도메인에 상속시켜줍니다.
@Entity
@Getter
@Setter
public class Member extends BaseEntity {
,,,
}
728x90
반응형