Notice
Recent Posts
Recent Comments
Link
250x250
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- 프로그래머스
- 정리
- 스프링부트
- Next.js
- 오라클
- 프론트엔드
- 스프링
- 미니정리
- web
- 코드 테스트
- jpa
- 데이터베이스
- oracle
- BACK-END
- MySQL
- java
- 백엔드
- 자바
- 쿼리
- jsp
- node.js
- JavaScript
- 프런트엔드
- 자바스크립트
- spring
- 알고리즘
- 서버
- 코드테스트
- SQL
- 디자인 패턴
Archives
- Today
- Total
참치코더의 꿈 메모장
JPA / 상속관계 매핑 (SINGLE_TABLE, JOINED, TABLE_PER_CLASS) 본문
728x90

객체지향에서는 클래스 상속을 통해 공통 속성을 물려주지만, 관계형 데이터베이스는 상속 개념이 없다.
그래서 JPA는 상속 구조를 테이블 구조로 변환하기 위해 3가지 전략을 사용한다.
1. 단일 테이블 전략(SINGLE_TABLE)
: 모든 자식 클래스의 데이터를 하나의 테이블에 모두 저장하는 것 (가장 단순하고 성능이 좋다.)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "DTYPE")
public abstract class Item {
@Id @GeneratedValue
private Long id;
private String name;
private int price;
}
@Entity
@DiscriminatorValue("A")
public class Album extends Item {
private String artist;
}
@Entity
@DiscriminatorValue("M")
public class Movie extends Item {
private String director;
}
|
cs |
장점
- 조인이 필요가 없다 따라서 조회 성능이 좋다.
- 구조가 단순하다.
단점
- 자식별로 선언된 컬럼은 null 속성 대입을 전부 허용해야한다.(null 값 많음)
- 테이블이 커지면 조회 시 비효율 해질 가능성이 있다.
2. 조인 전략 (JOINED)
: 부모 테이블과 자식 테이블을 정규화된 구조로 분리하고, 조인을 통해 상속 관계를 표현한다.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "DTYPE")
public abstract class Item {
@Id @GeneratedValue
private Long id;
private String name;
private int price;
}
@Entity
@DiscriminatorValue("A")
public class Album extends Item {
private String artist;
}
|
cs |
장점
- 정규화된 테이블 구조를 가진다.
- 중복 데이터 없이 저장이 가능하다.
단점
- 조회 시 조인이 항상 필요하다 (성능 저하가 단일 테이블에 비해 존재한다.)
- 쿼리가 복잡해진다.
3. 구현 클래스마다 테이블 전략 (TABLE_PER_CLASS)
: 부모 테이블 없이, 각 자식 클래스가 자기 테이블을 가진다.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Item {
@Id @GeneratedValue
private Long id;
private String name;
private int price;
}
@Entity
public class Album extends Item {
private String artist;
}
@Entity
public class Movie extends Item {
private String director;
}
|
cs |
장점
- 조인이 필요가 없다.
- 각 테이블이 독립적이라 테이블 별로 데이터 관리가 가능하다.
단점
- Item 전체를 조회하려면 UNION을 사용해야한다. (데이터베이스 전체를 다 뒤져야 한다.)
- 테이블마다 중복 컬럼값이 많다. (부모 필드가 자식마다 반복이 되서 저장된다.)
- 사용하면 안됨 X
728x90
'JPA' 카테고리의 다른 글
| JPA / 지연로딩(lazy loading), 즉시로딩(eager loading), 영속성 전이(cascading), 고아객체(Orphan) 정리 (0) | 2025.10.21 |
|---|---|
| JPA / @MappedSuperclass, 프록시 개념 정리 (0) | 2025.10.15 |
| JPA / 일대일(OneToOne) 매핑, 다대다(ManyToMany) 매핑(코드 위주) (0) | 2025.10.10 |
| JPA / 일대다(oneToMany) 관계 매핑 정리 (0) | 2025.10.09 |
| JPA - 양방향 매핑 과 설정 방법 정리 (0) | 2025.10.08 |
Comments