반응형
JPA는 객체 지향 프로그래밍에서 중요한 개념인 상속 관계를 데이터베이스 테이블과 연결하는 방법을 제공해줍니다. 이를 통해 객체 간의 상속 관계를 데이터베이스에서도 표현할 수 있습니다. 이런 매핑으로 객체 지향적인 코드와 데이터베이스의 구조를 조화시켜 객체 지향적인 프로그래밍을 할 수 있습니다.
상속 관계 매핑 방법
JPA에는 3 가지 상속 관계 매핑 방법이 있습니다.
1. 단일 테이블 전략
모든 클래스를 하나의 테이블에 통합하여 저장하는 방식입니다. 부모 클래스와 자식 클래스의 속성을 같은 테이블에 저장하기 때문에, 자식 클래스의 속성을 Nullable하게 해야합니다. 또한 자식 테이블들을 구분하기 위해 컬럼을 추가하여 구분컬럼으로 사용합니다.
이 방식은 테이블이 한 개이기 때문에 조인을 사용하지 않아 조회 성능은 빨라지지만, 컬럼이 많아져 볼륨이 커질수록 성능이 안 좋아질 수 있습니다.
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) // 상속 구현 전략 선택
@DiscriminatorColumn(name = "DTYPE") // 부모 클래스에 구분 컬럼 지정
public class Animal {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// ...
}
@Entity
@DiscriminatorValue("D")
public class Dog extends Animal {
private String name;
// ...
}
@Entity
@DiscriminatorValue("C")
public class Cat extends Animal {
private String breed;
// ...
}
2. 조인 테이블 전략
각각의 엔티티를 모두테이블로 만들고 자식 테이블이 부모 테이블의 PK를 받아서 해당 값을 PK + FK로 사용하는 방법입니다. 테이블의 타입을 명확하게 구분하기 위해 구분 컬럼을 추가해주는 것이 좋습니다 .
각 테이블이 정규화된 형태를 갖기 때문에 데이터의 일관성과 정확성을 유지할 수 있으나, 테이블 간의 조인이 필요하기 때문에 단일 테이블 전략과 비교하여 성능이 떨어질 수 있습니다.
@Entity
@Inheritance(strategy = InheritanceType.JOINED) // 상속 구현 전략 선택
@DiscriminatorColumn(name = "DTYPE") // 부모 클래스에 구분 컬럼 지정
public class Animal {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// ...
}
@Entity
public class Dog extends Animal {
private String name;
// ...
}
@Entity
public class Cat extends Animal {
private String breed;
// ...
}
공통 매핑: @MappedSuperclass
포스팅한 아래 글을 참고하시면 됩니다!
https://yeo-computerclass.tistory.com/503
반응형
'Spring Data > JPA' 카테고리의 다른 글
JPA 영속성 전이(CASCADE)와 고아 객체 제거: 데이터 일관성과 관리 효율 높이는 전략(방법) (0) | 2023.08.23 |
---|---|
JPA 프록시와 지연로딩: 성능 최적화를 위한 기술(방법) (0) | 2023.08.22 |
JPA 연관관계 매핑: 객체 간의 관계를 표현하고 데이터베이스에 저장 (0) | 2023.08.18 |
JPA 생성 및 수정 날짜 자동 처리를 위한 공통 엔티티 만들기 @MappedSuperclass, @EnableJpaAuditing (0) | 2023.08.17 |
JPA ddl-auto: 데이터베이스 스키마 자동 생성 전략 (0) | 2023.08.17 |