@MappedSuperclass 는 JPA에서 사용하는 어노테이션으로, 공통적인 속성이나 행동을 여러 엔티티에서 상속받아 사용할 수 있게 해준다.
@MappedSuperclass 로 지정된 클래스는 직접적으로 데이터베이스 테이블과 매핑되진 않는다. 다만 이 클래스를 상속받은 엔티티 클래스들은 상속받은 속성들을 자신의 것처럼 데이터베이스 테이블에 매핑할 수 있다.
@MappedSuperClass 는 공통된 속성이나 행동을 가진 엔티티들 간에 코드의 중복을 줄인다. 모델의 일관성을 유지하는 데 매우 유용하다.
사용법 및 특징 >>
공통된 필드(id, 생성일 등)와 메소드들을 @MappedSuperclass 로 정의하면, 이를 상속받는 하위 클래스들이 이러한 속성과 행동을 재사용할 수 있다.
@MappedSuperclass 로 지정된 클래스는 자체적인 데이터베이스 테이블을 가지진 않는다. 대신, 상속받는 하위 클래스들이 각자의 데이터베이스 테이블과 매핑된다.
하위 클래스들은 @MappedSuperclass 에서 정의된 필드를 마치 자신의 필드처럼 데이터베이스 테이블에 매핑할 수 있다.
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
@MappedSuperclass
public abstract class BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// 공통 필드 및 메소드
}
@Entity
public class User extends BaseEntity {
// private Long id; // BaseEntity의 id를 상속받았다.
private String name;
private String email;
// User 특유의 필드 및 메소드를 추가 정의한다.
}
@Entity
public class Product extends BaseEntity {
// private Long id; // BaseEntity의 id를 상속받았다.
private String productName;
private double price;
// Product 특유의 필드 및 메소드를 추가 정의한다.
}
위 코드에서, User와 Product 엔티티는 BaseEntity를 상속받아 id 필드를 재사용한다.
---
24년 1월 11일에 작성된 글입니다
'JAVA > SpringBoot' 카테고리의 다른 글
JPA @Entity 어노테이션으로 엔티티 매핑하기 (0) | 2024.03.25 |
---|---|
JPA @JoinColumn 어노테이션 이해하기 (0) | 2024.03.24 |
Lombok 의 @Data 어노테이션 : Java 코드 간단하게 만들기 (0) | 2024.03.24 |
@Embeddable, @Embedded : 객체 지향 JPA 모델링 (0) | 2024.03.24 |
JPA에서 @Column 어노테이션 사용하는 법 (0) | 2024.03.24 |