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회차 수업
'DB > JPA' 카테고리의 다른 글
| [JPA] ddl-auto를 썼는데 컬럼이 삭제되지 않는 이유 (1) | 2025.04.12 |
|---|---|
| [JPA] 더티 체킹 (Dirty Checking) (0) | 2025.03.13 |
| [JPA] 기본키 생성 전략 (추가설명) (업데이트중...) (0) | 2025.03.12 |
| [JPA] 기본키 생성 전략 (0) | 2025.03.03 |
| [JPA] Enity Annotation (1) | 2024.12.19 |