DB/JPA

[JPA] BaseEntity

annovation 2025. 2. 28. 08:50

BaseEntity

  • Spring Data JPA와 같은 ORM(Object-Relational Mapping) 프레임워크에서, @Entity로 선언된 클래스들은 데이터베이스의 테이블과 매핑됩니다.
  • 이때, 모든 엔티티에서 공통적으로 사용되는 속성로직BaseEntity에 정의하고, 다른 엔티티가 이를 상속받아 사용하는 방식이 일반적입니다.
  • 주로 객체 지향 프로그래밍에서 데이터베이스와 매핑되는 엔티티 클래스들을 작성할 때 공통 속성 및 로직을 포함하는 부모 클래스 역할을 합니다.

예시

@Getter
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
@MappedSuperclass
public class BaseEntity {
    @Id
    @GeneratedValue(strategy = IDENTITY) // AUTO_INCREMENT
    @Setter(AccessLevel.PRIVATE)
    @EqualsAndHashCode.Include
    private Long id;
}

 

1. @MappedSuperclass

이 클래스는 직접 테이블이 되지 않고, 다른 엔티티 클래스들이 상속해서 사용하는 부모 클래스라는 의미입니다.

public class Article extends BaseEntity {
    private String title;
    private String content;
    // id는 BaseEntity에서 상속받아서 자동으로 포함됨
}

 

2. @EqualsAndHashCode

  • onlyExplicitlyIncluded = true : 명시적으로 지정된 필드만 equals와 hashCode 계산에 사용
  • @EqualsAndHashCode.Include : id 필드만 equals와 hashCode 계산에 사
  • 실제 데이터 베이스에 쓰이는 예시
CREATE TABLE article (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,  /* BaseEntity에서 상속받은 부분 */
    title VARCHAR(255),                    /* Article 클래스에서 추가한 부분 */
    content TEXT                          /* Article 클래스에서 추가한 부분 */
);

 

3. @Getter, @Setter

  • @Getter : id 값을 가져올 수 있게 해줌
  • @Setter(AccessLevel.PRIVATE) : id는 외부에서 수정할 수 없고 내부에서만 설정 가능

4. @Id와 @GeneratedValue

  • @Id : 이 필드가 테이블의 기본키(Primary Key)라는 의미
  • @GeneratedValue(strategy = IDENTITY) : MySQL의 AUTO_INCREMENT처럼 숫자가 자동으로 1씩 증가하면서 생성됨

출처

1. OpenAI ChatGPT (https://openai.com)

2. 2024 프로그래머스 백엔드 데브코스 3기 4회차 수업