728x90
상속관계 매핑
관계형 데이터베이스의 슈퍼타입 서브타입 관계 모델링 기법이 객체상속과 유사하다.
상속관계 매핑은 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑한다.
어노테이션
@Inheritance(strategy=InheritanceType.XXX)
JOINED:조인전략
SINGLE_TABLE:단일 테이블 전략
TABLE_PER_CLASS:구현 클래스마다 테이블 전략
@DiscriminatorColumn(name=“DTYPE”)
부모클래스에 선언하고 하위 클래스를 구분하는 용도의 컬럼인 DTYPE을 추가한다.
@DiscriminatorValue(“XXX”)
하위클래스에 선언하고 엔티티를 저장할 때 슈퍼타입의 DTYPE에 저장할 값을 지정한다.
default:클래스 이름
방법
(1)각각 테이블로 변환 -> 조인 전략
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn
public abstract class Item {
@Id @GeneratedValue
@Column(name = "ITEM_ID")
private Long id;
private String name;
private int price;
private int stockQuantity;
}
장점
(1)테이블 정규화가 가능하다.
(2)외래 키 참조 무결성 제약조건 활용가능하다.
(3)저장공간을 효율화할 수 있다.
단점
(1)조회시 조인을 많이사용하여 성능이 떨어질 수 있다.
(2)조회 쿼리가 복잡하다.
(3)데이터 저장시 INSERT QUERY가 2번 호출된다.
(2)통합테이블로 변환 -> 단일 테이블 전략
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn
public abstract class Item extends Timestamped {
@Id @GeneratedValue
@Column(name = "ITEM_ID")
private Long id;
private String name;
private int price;
private int stockQuantity;
}
장점
(1)조인이 필요 없으므로 일반적으로 조회 성능이 빠르다
(2)조회 쿼리가 단순하다.
단점
(1)자식 엔티티가 매핑한 컬럼은 모두 null을 혀용해야 한다.
(2)단일 테이블에 모든 것을 저장하므로 테이블이 커질 수 있다. 상황에 따라서 조회 성능이 오히려 느려질 수 있다.
(3) 서브타입 테이블로 변환 ->구현 클래스마다 테이블 전략
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Item {
@Id @GeneratedValue
@Column(name = "ITEM_ID")
private Long id;
private String name;
private int price;
private int stockQuantity;
}
장점
(1)서브 타입을 명확하게 구분해서 처리할 때 효과적이다.
(2)not null 제약조건 사용 가능하다.
단점
(1)여러 자식 테이블을 함께 조회할 때 성능이 느리다(UNION SQL 필요)
(2)자식 테이블을 통합해서 쿼리하기 어렵다.
728x90
'Spring' 카테고리의 다른 글
프록시와 연관관계 관리 (0) | 2023.03.23 |
---|---|
매핑정보 상속 (0) | 2023.03.22 |
연관관계 매핑 (0) | 2023.03.20 |
Entity Mapping (0) | 2023.03.18 |
영속성 컨텍스트의 이점 (0) | 2023.03.16 |