JPA

테이블 전략

lby132 2022. 10. 18. 22:42

조인 전략

장점은 테이블 정규화, 저장공간 효율, 외래키 참조 무결성 제약조건 활용이 가능하다.

단점은 조회할때 조인을 많이 사용해 성능이 저하된다는 점과 조회 쿼리가 복잡하다. 데이터저장시에 insert쿼리를 2번이나 호출한다.

사용법

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn
public class Item {

InheritanceType을 JOINED로 설정하면 된다.

이상태로 실행하면 내가 만든 Item하위 엔티티들이 하나씩 생성된다.

아래는 실행결과값이다.

    create table Album (
       artist varchar(255),
        id bigint not null,
        primary key (id)
    )

 

create table Book (
       author varchar(255),
        isbn varchar(255),
        id bigint not null,
        primary key (id)
    )

 

create table Movie (
       actor varchar(255),
        director varchar(255),
        id bigint not null,
        primary key (id)
    )

 

다음은 단일 테이블 전략

장점은 조인이 필요없어 일반적으로조회 성능이 빠르다.

조회 쿼리가 단순하다.

 

단점은 자식 엔티티가 매핑한 컬럼은 모두 null을 허용한다.

단일 테이블에 모든 것을 저장하므로 테이블이 커질 수 있다. 상황이따라서 조회 성능이 오히려 느려질수 있음.

사용법은 

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn
public class Item {

InheritanceType만 SINGLE_TABLE로 바꿔주었다.

아래는 결과 값이다.

 create table Item (
       DTYPE varchar(31) not null,
        id bigint not null,
        name varchar(255),
        price integer not null,
        artist varchar(255),
        author varchar(255),
        isbn varchar(255),
        actor varchar(255),
        director varchar(255),
        primary key (id)
    )

 

조인과 다르게 하나의 테이블에 다 뭉쳐있게 생성 되었다.

그리고 insert쿼리도 한번만 일어났고 조인문도 없었다.

'JPA' 카테고리의 다른 글

Join Fetch  (0) 2022.10.21
Embedded Type  (0) 2022.10.19
mappedBy  (0) 2022.10.18
IDENTITY전략  (0) 2022.10.17
영속 컨텍스트  (1) 2022.10.15