티스토리 뷰

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
반응형
250x250
반응형
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함