엔티티에 공통으로 들어가는 멤버 변수들을 추상클래스로 만들고 해당 클래스를 상속받아 엔티티에 공통적인 기능을 수행하도록 하며 누가 언제 생성/마지막 수정을 했는지 자동으로 기록되게 할 수 있다.
@EnableJpaAuditing 애노테이션 추가@Configuration
@EnableJpaAuditing
public class JpaConfig {
}
@EntityListeners(AuditingEntityListener.class) 애노테이션 추가@Entity
@EntityListeners(AuditingEntityListener.class)
@Getter @Setter
public class yourEntity{
@CreatedDate //해당 엔티티 처음 생성시 날짜 자동 기록
private LocalDateTime createdAt;
@CreatedBy //해당 엔티티가 처음 생성시 생성자의 정보 자동 기록
@ManyToOne
private User createdBy;
@LastModifiedDate //해당 엔티티가 마지막으로 수정될 때 날짜 자동 기록
private LocalDateTime modifiedAt;
@LastModifiedBy //해당 엔티티가 마지막으로 수정될 대 수정자 정보 자동 기록
@ManyToOne
private User modifiedBy;
}
@Component
public class AuditorAwareImpl implements AuditorAware<String> {
@Override
public Optional<String> getCurrentAuditor() {
// 여기서 현재 인증된 사용자를 반환
// 예: Spring Security를 사용하는 경우 SecurityContextHolder로부터 인증 정보 추출
return Optional.of("system"); // 예시로 시스템 계정 사용
}
}
AuditorAwareImpl 클래스는 현재 인증된 사용자 정보를 반환하는 역할을 한다. SecurityContextHolder 등을 사용해 실제 인증 정보를 추출할 수 있다.
@Service
public class YourEntityService {
@Autowired
private YourEntityRepository yourEntityRepository;
public YourEntity createEntity(YourEntity yourEntity) {
return yourEntityRepository.save(yourEntity);
}
public YourEntity updateEntity(YourEntity yourEntity) {
return yourEntityRepository.save(yourEntity);
}
}
위의 예시코드 같이 엔티티를 저장하거나 업데이트하면 createdDate, lastModifeidDate, createBy, lastModifiedBy 필드가 자동으로 채워진다.
@EnableJpaAuditing은 하나의 Spring Configuration 클래스에만 적용되야함@Component로 등록되어야 함@Column(updatable = false) 로 지정하면 해당 필드는 엔티티의 업데이트 시 수정되지 않음