JPA

JPA @MappedSuperClass

devJK93 2024. 12. 28.

 

πŸ“ @MappedSuperclassλž€?

@MappedSuperclassλŠ” JPAμ—μ„œ 곡톡 속성을 μ—¬λŸ¬ μ—”ν‹°ν‹° ν΄λž˜μŠ€μ— μž¬μ‚¬μš©ν•  수 있게 ν•΄μ£ΌλŠ” 슈퍼클래슀λ₯Ό μ •μ˜ν•  λ•Œ μ‚¬μš©λ˜λŠ” μ–΄λ…Έν…Œμ΄μ…˜μž…λ‹ˆλ‹€. 이 μŠˆνΌν΄λž˜μŠ€λŠ” μ—”ν‹°ν‹°κ°€ μ•„λ‹ˆλ©°, λ”°λΌμ„œ λ°μ΄ν„°λ² μ΄μŠ€μ— λ³„λ„μ˜ ν…Œμ΄λΈ”μ΄ μƒμ„±λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λŒ€μ‹ , 이 슈퍼클래슀λ₯Ό μƒμ†λ°›λŠ” μ„œλΈŒν΄λž˜μŠ€ μ—”ν‹°ν‹°μ˜ ν…Œμ΄λΈ”μ— 슈퍼클래슀의 ν•„λ“œκ°€ ν¬ν•¨λ©λ‹ˆλ‹€.

μ£Όμš” 포인트:

  • μ—”ν‹°ν‹°κ°€ μ•„λ‹˜: @MappedSuperclass둜 μ„ μ–Έλœ ν΄λž˜μŠ€λŠ” JPA μ—”ν‹°ν‹°κ°€ μ•„λ‹ˆλ―€λ‘œ λ°μ΄ν„°λ² μ΄μŠ€μ— λ³„λ„μ˜ ν…Œμ΄λΈ”μ΄ μƒμ„±λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • 곡톡 속성 상속: 슈퍼클래슀의 ν•„λ“œμ™€ 맀핑 정보가 μ„œλΈŒν΄λž˜μŠ€ 엔티티에 μƒμ†λ˜μ–΄ ν…Œμ΄λΈ”μ— ν¬ν•¨λ©λ‹ˆλ‹€.
  • 단일 ν…Œμ΄λΈ” μ „λž΅κ³Όμ˜ 차이: λ‹€λ₯Έ 상속 맀핑 μ „λž΅κ³ΌλŠ” 달리, 슈퍼클래슀 μžμ²΄λŠ” λ³„λ„μ˜ ν…Œμ΄λΈ”λ‘œ κ΄€λ¦¬λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

πŸ“ @MappedSuperclass의 νŠΉμ§•

2.1. ν•„λ“œ 맀핑 상속

@MappedSuperclass둜 μ„ μ–Έλœ 클래슀의 ν•„λ“œλŠ” 이λ₯Ό μƒμ†λ°›λŠ” μ—”ν‹°ν‹° ν΄λž˜μŠ€μ— κ·ΈλŒ€λ‘œ ν¬ν•¨λ©λ‹ˆλ‹€. λ”°λΌμ„œ μŠˆνΌν΄λž˜μŠ€μ—μ„œ μ •μ˜λœ ν•„λ“œλ“€μ€ μ„œλΈŒν΄λž˜μŠ€μ˜ ν…Œμ΄λΈ”μ— λ§€ν•‘λ©λ‹ˆλ‹€.

2.2. μ—”ν‹°ν‹°κ°€ μ•„λ‹˜

@MappedSuperclass둜 μ§€μ •λœ ν΄λž˜μŠ€λŠ” μ—”ν‹°ν‹°κ°€ μ•„λ‹ˆλ―€λ‘œ, JPAμ—μ„œ μ§μ ‘μ μœΌλ‘œ κ΄€λ¦¬λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 즉, 이 ν΄λž˜μŠ€λ‘œλŠ” λ°μ΄ν„°λ² μ΄μŠ€μ— 쿼리λ₯Ό μ‹€ν–‰ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

2.3. 상속 ꡬ쑰

  • 단일 상속: ν•˜λ‚˜μ˜ μŠˆνΌν΄λž˜μŠ€λ§Œμ„ 상속받을 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 닀쀑 상속 λΆˆκ°€: μžλ°”μ˜ 닀쀑 상속 μ œν•œμœΌλ‘œ 인해, ν•˜λ‚˜μ˜ ν΄λž˜μŠ€λŠ” ν•˜λ‚˜μ˜ @MappedSuperclassλ§Œμ„ 상속받을 수 μžˆμŠ΅λ‹ˆλ‹€.

2.4. μ–΄λ…Έν…Œμ΄μ…˜ μ‚¬μš©

  • ν•„μˆ˜: μŠˆνΌν΄λž˜μŠ€μ— λ°˜λ“œμ‹œ @MappedSuperclass μ–΄λ…Έν…Œμ΄μ…˜μ„ 지정해야 ν•©λ‹ˆλ‹€.
  • μΆ”κ°€ μ–΄λ…Έν…Œμ΄μ…˜ μ‚¬μš© κ°€λŠ₯: ν•„λ“œμ— @Column, @Id λ“± λ‹€λ₯Έ JPA μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ“ @MappedSuperclass μ‚¬μš© 예제

3.1. 기본 예제

μ•„λž˜ μ˜ˆμ œμ—μ„œλŠ” BaseEntityλΌλŠ” 슈퍼클래슀λ₯Ό μ •μ˜ν•˜κ³ , 이λ₯Ό μƒμ†λ°›λŠ” Member와 Order μ—”ν‹°ν‹°λ₯Ό κ΅¬ν˜„ν•©λ‹ˆλ‹€.

BaseEntity.java

<!-- BaseEntity.java -->
import javax.persistence.*;
import java.time.LocalDateTime;

@MappedSuperclass
public abstract class BaseEntity {

    @Id
    @GeneratedValue
    private Long id;

    @Column(name = "created_date", updatable = false)
    private LocalDateTime createdDate;

    @Column(name = "last_modified_date")
    private LocalDateTime lastModifiedDate;

    // Getter, Setter
    public Long getId() {
        return id;
    }

    public LocalDateTime getCreatedDate() {
        return createdDate;
    }

    public void setCreatedDate(LocalDateTime createdDate) {
        this.createdDate = createdDate;
    }

    public LocalDateTime getLastModifiedDate() {
        return lastModifiedDate;
    }

    public void setLastModifiedDate(LocalDateTime lastModifiedDate) {
        this.lastModifiedDate = lastModifiedDate;
    }
}

Member.java

<!-- Member.java -->
import javax.persistence.*;

@Entity
public class Member extends BaseEntity {

    private String name;
    private int age;

    // Getter, Setter
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

	public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

Order.java

<!-- Order.java -->
import javax.persistence.*;
import java.time.LocalDateTime;

@Entity
public class Order extends BaseEntity {

    private LocalDateTime orderDate;
    private String status;

    // Getter, Setter
    public LocalDateTime getOrderDate() {
        return orderDate;
    }

    public void setOrderDate(LocalDateTime orderDate) {
        this.orderDate = orderDate;
    }

	public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }
}

3.2. μ„€λͺ…

  • BaseEntity:
    • @MappedSuperclass μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•˜μ—¬ 슈퍼클래슀둜 μ„ μ–Έλ˜μ—ˆμŠ΅λ‹ˆλ‹€.
    • 곡톡 속성인 id, createdDate, lastModifiedDateκ°€ μ •μ˜λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
  • Member와 Order:
    • @Entity μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•˜μ—¬ JPA μ—”ν‹°ν‹°λ‘œ μ„ μ–Έλ˜μ—ˆμŠ΅λ‹ˆλ‹€.
    • BaseEntityλ₯Ό 상속받아 곡톡 속성을 μž¬μ‚¬μš©ν•©λ‹ˆλ‹€.
    • 각 μ—”ν‹°ν‹°λŠ” μžμ‹ μ˜ 고유 속성인 name, age, orderDate, status 등을 μΆ”κ°€λ‘œ μ •μ˜ν•©λ‹ˆλ‹€.

3.3. λ°μ΄ν„°λ² μ΄μŠ€ ν…Œμ΄λΈ” ꡬ쑰

  • Member ν…Œμ΄λΈ”
    • id (PK)
    • created_date
    • last_modified_date
    • name
    • age
  • Order ν…Œμ΄λΈ”
    • id (PK)
    • created_date
    • last_modified_date
    • order_date
    • status

BaseEntityλŠ” λ³„λ„μ˜ ν…Œμ΄λΈ”λ‘œ μƒμ„±λ˜μ§€ μ•Šκ³ , Member와 Order ν…Œμ΄λΈ”μ— id, created_date, last_modified_date ν•„λ“œκ°€ ν¬ν•¨λ©λ‹ˆλ‹€.


πŸ“ λ‹€λ₯Έ 상속 맀핑 μ „λž΅κ³Όμ˜ 비ꡐ

JPAμ—μ„œλŠ” 상속 관계λ₯Ό λ§€ν•‘ν•˜κΈ° μœ„ν•œ μ—¬λŸ¬ 가지 μ „λž΅μ„ μ œκ³΅ν•©λ‹ˆλ‹€. μ£Όμš” μ „λž΅μœΌλ‘œλŠ” @MappedSuperclass 외에도 @Inheritance μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•œ 상속 맀핑 μ „λž΅μ΄ μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό λΉ„κ΅ν•˜μ—¬ μ΄ν•΄ν•˜λ©΄ @MappedSuperclass의 μš©λ„μ™€ μž₯점을 더 λͺ…ν™•νžˆ μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

4.1. @MappedSuperclass vs @Inheritance

νŠΉμ§• @MappedSuperclass @Inheritance (SINGLE_TABLE, JOINED, TABLE_PER_CLASS)
μ—”ν‹°ν‹° μ—¬λΆ€ μŠˆνΌν΄λž˜μŠ€λŠ” μ—”ν‹°ν‹°κ°€ μ•„λ‹˜ μŠˆνΌν΄λž˜μŠ€κ°€ 엔티티일 수 있음
ν…Œμ΄λΈ” 맀핑 슈퍼클래슀의 ν•„λ“œλŠ” μ„œλΈŒν΄λž˜μŠ€μ˜ ν…Œμ΄λΈ”μ— 맀핑 μ„œλΈŒν΄λž˜μŠ€μ™€ 슈퍼클래슀의 ν•„λ“œκ°€ 각각 λ³„λ„μ˜ ν…Œμ΄λΈ”μ— 맀핑됨 (맀핑 μ „λž΅μ— 따라 닀름)
쿼리 κ°€λŠ₯ μ—¬λΆ€ 슈퍼클래슀λ₯Ό 쿼리할 수 μ—†μŒ 슈퍼클래슀 μ—”ν‹°ν‹°λ₯Ό 쿼리할 수 있음 (SINGLE_TABLE, JOINED)
상속 κ³„μΈ΅μ˜ λ³΅μž‘μ„± λ‹¨μˆœνžˆ ν•„λ“œ μƒμ†μš© λ‹€μ–‘ν•œ 상속 맀핑 μ „λž΅μ„ 톡해 λ³΅μž‘ν•œ 상속 계측을 지원
λ‹€ν˜•μ„± 지원 μ§€μ›ν•˜μ§€ μ•ŠμŒ 지원함 (특히 SINGLE_TABLE, JOINED μ „λž΅μ—μ„œ)
μš©λ„ 곡톡 속성 μž¬μ‚¬μš© 객체 지ν–₯ 상속 ꡬ쑰λ₯Ό λ°μ΄ν„°λ² μ΄μŠ€μ— 반영
μž₯점 μ½”λ“œ μž¬μ‚¬μš©μ„± ν–₯상, λ‹¨μˆœν•œ 섀계, μ„±λŠ₯ ν–₯상 객체 지ν–₯ 상속 ꡬ쑰λ₯Ό λ°μ΄ν„°λ² μ΄μŠ€μ— 잘 반영 κ°€λŠ₯, λ‹€ν˜•μ„± 지원
단점 λ‹€ν˜•μ„± 미지원, 슈퍼클래슀λ₯Ό 직접 쿼리할 수 μ—†μŒ, λ³΅μž‘ν•œ 상속 ꡬ쑰 지원 어렀움, μ œν•œλœ κΈ°λŠ₯ 맀핑 μ „λž΅μ— 따라 μ„±λŠ₯κ³Ό λ³΅μž‘μ„±μ΄ 닀름, νŠΉμ • μ „λž΅μ€ ν…Œμ΄λΈ” 쑰인이 많이 λ°œμƒν•  수 있음

4.2. 맀핑 μ „λž΅ μš”μ•½

  1. @MappedSuperclass:
    • μš©λ„: 곡톡 속성을 μž¬μ‚¬μš©ν•  λ•Œ, 상속 κ³„μΈ΅μ˜ λ‹€ν˜•μ„±μ΄ ν•„μš” 없을 λ•Œ.
    • μž₯점: λ‹¨μˆœν•œ 섀계, ν…Œμ΄λΈ” 쑰인 λΆˆν•„μš”.
    • 단점: λ‹€ν˜•μ„± 지원 μ•ˆ 함, 슈퍼클래슀λ₯Ό 직접 쿼리할 수 μ—†μŒ.
  2. @Inheritance:
    • SINGLE_TABLE:
      • μ„€λͺ…: λͺ¨λ“  상속 계측을 단일 ν…Œμ΄λΈ”μ— μ €μž₯.
      • μž₯점: μ„±λŠ₯ 우수, 쑰인 λΆˆν•„μš”.
      • 단점: NULL 값이 많이 λ°œμƒ, 데이터 무결성 관리 어렀움.
    • JOINED:
      • μ„€λͺ…: μŠˆνΌν΄λž˜μŠ€μ™€ μ„œλΈŒν΄λž˜μŠ€λ₯Ό λ³„λ„μ˜ ν…Œμ΄λΈ”μ— μ €μž₯ν•˜κ³  쑰인.
      • μž₯점: 데이터 μ •κ·œν™”, 쀑볡 μ΅œμ†Œν™”.
      • 단점: 쑰인 ν•„μš”λ‘œ μ„±λŠ₯ μ €ν•˜ κ°€λŠ₯.
    • TABLE_PER_CLASS:
      • μ„€λͺ…: 각 μ„œλΈŒν΄λž˜μŠ€λ§ˆλ‹€ λ³„λ„μ˜ ν…Œμ΄λΈ”μ„ 생성.
      • μž₯점: 독립적인 ν…Œμ΄λΈ”, μ„œλΈŒν΄λž˜μŠ€λ³„ μ΅œμ ν™” κ°€λŠ₯.
      • 단점: 데이터 쀑볡, 슈퍼클래슀 데이터 쑰회 어렀움.

πŸ“ @MappedSuperclass의 μž₯단점

5.1. μž₯점

  1. μ½”λ“œ μž¬μ‚¬μš©μ„± ν–₯상:
    • κ³΅ν†΅λœ 속성을 μŠˆνΌν΄λž˜μŠ€μ— μ •μ˜ν•˜κ³ , μ—¬λŸ¬ μ—”ν‹°ν‹°μ—μ„œ 이λ₯Ό 상속받아 쀑볡 μ½”λ“œλ₯Ό 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€.
  2. λ‹¨μˆœν•œ 섀계:
    • μŠˆνΌν΄λž˜μŠ€κ°€ λ³„λ„μ˜ ν…Œμ΄λΈ”μ„ μƒμ„±ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ λ°μ΄ν„°λ² μ΄μŠ€ 섀계가 λ‹¨μˆœν•΄μ§‘λ‹ˆλ‹€.
  3. μ„±λŠ₯ ν–₯상:
    • 쑰인이 ν•„μš” μ—†μœΌλ―€λ‘œ μ„±λŠ₯이 κ°œμ„ λ  수 μžˆμŠ΅λ‹ˆλ‹€. 특히, 단일 ν…Œμ΄λΈ” μ „λž΅μ„ μ‚¬μš©ν•  λ•Œ 쑰인 λΉ„μš©μ΄ λ°œμƒν•˜μ§€ μ•Šμ•„ λΉ λ₯Έ μ‘°νšŒκ°€ κ°€λŠ₯ν•©λ‹ˆλ‹€.
  4. μœ μ—°μ„±:
    • 상속 계측이 λ‹¨μˆœν•˜κ³ , λ‹€ν˜•μ„±μ΄ ν•„μš” 없을 λ•Œ μœ μš©ν•©λ‹ˆλ‹€. μ—¬λŸ¬ μ—”ν‹°ν‹°κ°€ κ³΅ν†΅λœ ν•„λ“œλ₯Ό κ°€μ§ˆ λ•Œ μ‰½κ²Œ μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

5.2. 단점

  1. λ‹€ν˜•μ„± 미지원:
    • @MappedSuperclassλŠ” λ‹€ν˜•μ„±μ„ μ§€μ›ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ—, 슈퍼클래슀λ₯Ό κΈ°μ€€μœΌλ‘œ ν•œ μ—”ν‹°ν‹° 쿼리λ₯Ό μ‹€ν–‰ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
  2. 슈퍼클래슀 직접 쿼리 λΆˆκ°€:
    • @MappedSuperclass둜 μ„ μ–Έλœ μŠˆνΌν΄λž˜μŠ€λŠ” μ—”ν‹°ν‹°κ°€ μ•„λ‹ˆλ―€λ‘œ, 이λ₯Ό μ§μ ‘μ μœΌλ‘œ μ‘°νšŒν•˜κ±°λ‚˜ μ‘°μž‘ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
  3. λ³΅μž‘ν•œ 상속 ꡬ쑰 지원 어렀움:
    • 상속 계측이 λ³΅μž‘ν•˜κ±°λ‚˜, λ‹€ν˜•μ„±μ΄ ν•„μš”ν•œ κ²½μš°μ—λŠ” λ‹€λ₯Έ 상속 맀핑 μ „λž΅(@Inheritance)을 μ‚¬μš©ν•˜λŠ” 것이 더 μ ν•©ν•©λ‹ˆλ‹€.
  4. μ œν•œλœ κΈ°λŠ₯:
    • @MappedSuperclassλŠ” μ—”ν‹°ν‹°μ˜ 일뢀 κΈ°λŠ₯λ§Œμ„ μ œκ³΅ν•˜λ©°, μ™„μ „ν•œ 상속 맀핑을 μ§€μ›ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

πŸ“ μ‚¬μš© μ‹œ μ£Όμ˜μ‚¬ν•­

  1. μ—”ν‹°ν‹°λ‘œ μ‚¬μš© λΆˆκ°€:
    • @MappedSuperclass둜 μ„ μ–Έλœ ν΄λž˜μŠ€λŠ” μ—”ν‹°ν‹°λ‘œ μ‚¬μš©λ  수 μ—†μœΌλ―€λ‘œ, 이λ₯Ό 기반으둜 ν•˜λŠ” 쿼리λ₯Ό μž‘μ„±ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
  2. 상속 관계 관리:
    • 단일 μƒμ†λ§Œμ„ μ§€μ›ν•˜λ©°, 닀쀑 상속은 λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€. μžλ°”μ˜ 단일 상속 μ œν•œμœΌλ‘œ 인해, ν•˜λ‚˜μ˜ ν΄λž˜μŠ€λŠ” ν•˜λ‚˜μ˜ @MappedSuperclassλ§Œμ„ 상속받을 수 μžˆμŠ΅λ‹ˆλ‹€.
  3. 상속 μ „λž΅ 혼용 κΈˆμ§€:
    • @MappedSuperclass와 λ‹€λ₯Έ 상속 맀핑 μ „λž΅(@Inheritance)을 ν˜Όμš©ν•˜μ—¬ μ‚¬μš©ν•˜λŠ” 것은 ꢌμž₯λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ΄λŠ” λ§€ν•‘μ˜ λ³΅μž‘μ„±μ„ μ¦κ°€μ‹œν‚€κ³ , 예기치 μ•Šμ€ λ™μž‘μ„ μœ λ°œν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  4. 데이터 무결성:
    • 곡톡 속성이 μ—¬λŸ¬ 엔티티에 λΆ„μ‚°λ˜μ–΄ μžˆμ„ 수 μžˆμœΌλ―€λ‘œ, 데이터 무결성을 μœ μ§€ν•˜κΈ° μœ„ν•΄ 좔가적인 μ£Όμ˜κ°€ ν•„μš”ν•©λ‹ˆλ‹€.
  5. λ³΄μ•ˆ 고렀사항:
    • μŠˆνΌν΄λž˜μŠ€μ— λ―Όκ°ν•œ 정보가 ν¬ν•¨λ˜μ–΄ μžˆλŠ” 경우, 이λ₯Ό μƒμ†λ°›λŠ” μ—”ν‹°ν‹°μ—μ„œ 적절히 관리해야 ν•©λ‹ˆλ‹€.

πŸ“ 베슀트 ν”„λž™ν‹°μŠ€

  1. 곡톡 속성 μž¬μ‚¬μš©:
    • μ—¬λŸ¬ μ—”ν‹°ν‹°μ—μ„œ κ³΅ν†΅μœΌλ‘œ μ‚¬μš©ν•˜λŠ” ν•„λ“œ(예: id, createdDate, lastModifiedDate)λŠ” @MappedSuperclassλ₯Ό μ‚¬μš©ν•˜μ—¬ μŠˆνΌν΄λž˜μŠ€μ— μ •μ˜ν•˜κ³ , 이λ₯Ό 상속받아 μž¬μ‚¬μš©ν•©λ‹ˆλ‹€.
  2. 단일 μ±…μž„ 원칙:
    • μŠˆνΌν΄λž˜μŠ€λŠ” 였직 κ³΅ν†΅λœ 속성과 κ΄€λ ¨λœ μ±…μž„λ§Œμ„ κ°€μ Έμ•Ό ν•˜λ©°, λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ€ μ„œλΈŒν΄λž˜μŠ€ μ—”ν‹°ν‹° λ˜λŠ” μ„œλΉ„μŠ€ 계측에 μœ„μΉ˜μ‹œν‚΅λ‹ˆλ‹€.
  3. 상속 계측 λ‹¨μˆœν™”:
    • 상속 계측을 κ°€λŠ₯ν•œ λ‹¨μˆœν•˜κ²Œ μœ μ§€ν•˜κ³ , @MappedSuperclassλŠ” λ‹€ν˜•μ„±μ΄ ν•„μš” μ—†λŠ” κ²½μš°μ—λ§Œ μ‚¬μš©ν•©λ‹ˆλ‹€.
  4. μ½”λ“œ 일관성 μœ μ§€:
    • μŠˆνΌν΄λž˜μŠ€μ™€ μ„œλΈŒν΄λž˜μŠ€ κ°„μ˜ 일관성을 μœ μ§€ν•˜κΈ° μœ„ν•΄, ν•„λ“œλͺ…κ³Ό νƒ€μž…μ„ μΌκ΄€λ˜κ²Œ κ΄€λ¦¬ν•©λ‹ˆλ‹€.
  5. ν…ŒμŠ€νŠΈμ™€ 검증:
    • @MappedSuperclassλ₯Ό μ‚¬μš©ν•œ 경우, μ„œλΈŒν΄λž˜μŠ€ μ—”ν‹°ν‹°κ°€ μ˜¬λ°”λ₯΄κ²Œ λ§€ν•‘λ˜κ³ , λ°μ΄ν„°λ² μ΄μŠ€ μŠ€ν‚€λ§ˆκ°€ κΈ°λŒ€ν•œ λŒ€λ‘œ μƒμ„±λ˜λŠ”μ§€ ν…ŒμŠ€νŠΈν•©λ‹ˆλ‹€.

πŸ“ κ²°λ‘ 

@MappedSuperclassλŠ” JPAμ—μ„œ 곡톡 속성을 μ—¬λŸ¬ 엔티티에 효율적으둜 μž¬μ‚¬μš©ν•  수 있게 ν•΄μ£ΌλŠ” μœ μš©ν•œ λ„κ΅¬μž…λ‹ˆλ‹€. 이λ₯Ό 톡해 μ½”λ“œ 쀑볡을 쀄이고, κ³΅ν†΅λœ ν•„λ“œλ₯Ό μΌκ΄€λ˜κ²Œ 관리할 수 μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ‹€ν˜•μ„±μ΄ ν•„μš”ν•˜μ§€ μ•Šκ³ , λ‹¨μˆœν•œ 상속 κ΅¬μ‘°μ—λ§Œ μ ν•©ν•˜λ©°, @MappedSuperclass μžμ²΄λŠ” μ—”ν‹°ν‹°λ‘œ μ·¨κΈ‰λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 이λ₯Ό 염두에 두고 μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

λ³΅μž‘ν•œ 상속 κ΅¬μ‘°λ‚˜ λ‹€ν˜•μ„±μ΄ ν•„μš”ν•œ κ²½μš°μ—λŠ” @MappedSuperclassλ³΄λ‹€λŠ” @Inheritance μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•œ λ‹€λ₯Έ 상속 맀핑 μ „λž΅μ„ κ³ λ €ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. ν”„λ‘œμ νŠΈμ˜ μš”κ΅¬μ‚¬ν•­κ³Ό 상속 ꡬ쑰의 λ³΅μž‘μ„±μ— 따라 μ μ ˆν•œ 맀핑 μ „λž΅μ„ μ„ νƒν•˜μ—¬ λ°μ΄ν„°λ² μ΄μŠ€μ™€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ νš¨μœ¨μ„±μ„ κ·ΉλŒ€ν™”ν•˜μ‹œκΈ° λ°”λžλ‹ˆλ‹€.


πŸ“š μΆ”κ°€ μ°Έκ³  자료

λŒ“κΈ€