JPA BaseEntity

dia·2025년 2월 20일

JPA 엔티티에서 공통적으로 필요한 속성과 기능을 모아둔 추상 클래스
모든 엔티티에 공통적으로 필요한 생성일, 수정일을 관리하기 위해 사용

  • 중복 코드 제거
  • 생성/수정 시간 자동 관리 - 객체 변경 이력 관리
  • 소프트 삭제 구현

사용 준비

JpaConfig

Spring Data JPA의 Auditing 기능 활성화

import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@Configuration
@EnableJpaAuditing
public class JpaConfig {
}


생성/수정 시간

모든 엔티티에서 자동으로 사용

BaseEntity

@Getter
@EntityListeners(AuditingEntityListener.class)
@MappedSuperclass
public class BaseEntity {
	// 생성 시간
    @CreatedDate
	@Setter(AccessLevel.PRIVATE)
	private LocalDateTime createdAt;
    
    // 수정 시간
	@LastModifiedDate
	@Column(insertable = false)
	@Setter(AccessLevel.PRIVATE)
	private LocalDateTime modifiedAt;
}

소프트 삭제

SoftDeletableEntity

소프트 삭제가 필요한 엔티티만 상속 받아서 사용

@Getter
@MappedSuperclass
public abstract class SoftDeletableEntity extends BaseEntity {
	// 삭제 시간 (소프트 삭제)
    @Column(nullable = true)
	private LocalDateTime deletedAt;

	public void delete() {
		this.deletedAt = LocalDateTime.now();
	}
}


import

import java.time.LocalDateTime;

import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import jakarta.persistence.Column;
import jakarta.persistence.EntityListeners;
import jakarta.persistence.MappedSuperclass;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;
profile
CS 메모장

0개의 댓글