티스토리 뷰
728x90
반응형
단일 테이블이란?
- 한마디로 한 테이블에 다 선언하는 방법
- 사용 어노테이션
- @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
상속관계
예시)
Item class를 Album,Movie.Book이 상속을 받고있는 경우이다.
왼쪽 item 테이블을 보면 Album,Movie.Book 3개의 객체 내용이 한 테이블에 포함되어있다.
각각의 Album,Movie.Book 클래스를 확인해 보자.
사용 어노테이션
- @Inheritance(strategy=InheritanceType.SINGLE_TABLE)
- @DiscriminatorColumn(name=””)
- @DiscriminatorValue(””);
@DiscriminatorColumn
- 상속에 해당하는 부모클래스에 지정하는 어노테이션
- 상속을 하는 클래스일 경우 상속 받는 대상들을 구분하기 위해서 타입 선언 하게 된다.
- default 컬럼명은 DTYPE 이지만 name 선언을 통해 변경이 가능하다.
@DiscriminatorValue
- 상속받는 자식클래스에 사용하는 어노테이션
- 부모클래스 @DiscriminatorColumn에 해당하는 컬럼에 값을 의미
- default 값은 클래스 명이며 값명을 변경할 수 있다.
우선 부모 클래스에 해당하는 Item 클래스 코드
선언 예시
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
//@DiscriminatorColumn(name="GUBUN")
public class Item {
@Id
@GeneratedValue
private Long id;
private String name;
private int price;
}
Album,Movie.Book 클래스 코드
// 앨범 클래스
@Entity
@DiscriminatorValue("A")
public class Album extends Item{
private String artist;
}
//책 클래스
@Entity
@DiscriminatorValue("B")
public class Book extends Item{
private String author;
private String isbn;
}
//영화 클래스
@Entity
@DiscriminatorValue("MMM")
public class Movie extends Item{
private String director;
private String actor;
}
선언 결과 : 한 테이블에 Album,Movie,Book에 해당하는 컬럼들이 선언됨
단일 테이블 등록 예제
- Item 과 Movie 등록 처리 할 경우 예시
Movie movie = new Movie();
movie.setDirector("test2");
movie.setActor("bbb2");
movie.setName("바람과 함께 사라지다");
movie.setPrice(10000);
entityManager.persist(movie);//등록
persist를 처리했을 경우 쿼리 결과를 확인해보자
테이블 결과 : Movie 관련 컬럼을 제외하고는 전부 null 처리가 됨
단일 테이블 전략의 장점과 단점
- 장점
- 조인이 필요 없으므로 일반적으로 조회 성능이 빠름
- 조회 쿼리가 단순함
- 단점
- 자식 엔티티가 매핑한 컬럼은 모두 null 허용
- 단일 테이블에 모든 것을 저장하므로 테이블이 커질 수 있다
- 상황에 따라서 조회 성능이 오히려 느려질 수 있다.
728x90
반응형
'프로그램 언어 > Spring JPA' 카테고리의 다른 글
@MappedSuperclass(공통 속성 매핑) (0) | 2023.04.27 |
---|---|
SPRING JPA 상속 관계 매핑 (조인 전략) (0) | 2023.04.27 |
양방향 연관관계 , 연관관계의 주인 (0) | 2023.04.26 |
테이블 지향 모델링 vs 객체 지향 모델링 (0) | 2023.04.26 |
엔티티 매핑(번외 편) (0) | 2023.04.26 |
250x250
반응형
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 권한
- Lock
- 캐시
- dfs
- centos7
- Cache
- 이미지
- 개념 이해하기
- Quartz
- 캘린더
- Java
- hazelcast
- ncp
- LocalDate
- insert
- dockerfile
- 스케줄러
- Linux
- 네이버 클라우드
- 정의
- mybatis
- 격리수준
- 리눅스
- spring
- 도커
- 알고리즘
- leatcode
- MySQL
- docker
- 컨테이너
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
글 보관함