1. InheritanceType.JOINED 전략이 뭔데?


InheritanceType.JOINED 전략을 이해하려면 JPA에서 상속을 사용하는 방법과 이 전략이 데이터베이스 테이블에 어떻게 매핑되는지를 알아야 합니다. InheritanceType.JOINED는 JPA에서 상속된 엔티티를 데이터베이스에 매핑할 때 사용하는 세 가지 전략 중 하나입니다.

InheritanceType 전략들

JPA에서 상속 구조를 데이터베이스에 매핑할 때 주로 사용되는 세 가지 전략이 있습니다:

  1. SINGLE_TABLE: 모든 클래스의 필드가 하나의 테이블에 저장됩니다.
  2. JOINED: 각 클래스가 자체 테이블을 가지며, 상속 구조에 따라 테이블들이 조인(Join)됩니다.
  3. TABLE_PER_CLASS: 각 클래스마다 별도의 테이블이 생성되고, 상속 관계를 고려하지 않고 독립적으로 저장됩니다.

InheritanceType.JOINED 전략

InheritanceType.JOINED 전략을 사용하면, 상속 구조의 각 엔티티 클래스가 별도의 테이블에 저장됩니다. 상위 클래스의 테이블과 하위 클래스의 테이블은 기본 키를 기준으로 조인(Join)되어, 전체 객체의 데이터를 얻을 수 있습니다.

예제 설명

import jakarta.persistence.*;

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Employee {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
}

@Entity
public class FullTimeEmployee extends Employee {
    private Double salary;
}

@Entity
public class PartTimeEmployee extends Employee {
    private Double hourlyWage;
}

위 예제에서 Employee는 상위 클래스(base class)이고, FullTimeEmployeePartTimeEmployee는 상위 클래스를 확장하는 하위 클래스(subclass)입니다.

데이터베이스 테이블 구조

InheritanceType.JOINED 전략을 사용하면 다음과 같은 데이터베이스 테이블 구조가 생성됩니다:

  1. Employee 테이블: 상위 클래스의 필드를 저장합니다.
  2. FullTimeEmployee 테이블: 상위 클래스의 기본 키를 외래 키로 가지고, 하위 클래스의 필드를 저장합니다.