Web/JPA
고급매핑
프로그래멍
2020. 2. 3. 20:13
* 상속 관계 매핑
- 데이터 베이스엔 상속관계가 없다
- 상속관계 매핑 : 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑
//부모 클래스 조인전략
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorColumn(name=“DTYPE”)
//자식 클래스
@DiscriminatorValue(“XXX”)
//부모 클래스 단일 테이블 전략
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name=“DTYPE”)
//자식 클래스
@DiscriminatorValue(“XXX”)
//부모 클래스 구현 클래스마다 테이블 전략
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
* 테이블 별 장단점
- 조인
장점 : 테이블 정규화
외래키 참조, 무결성 제약조건 활용가능
저장공간 효율화
단점 : 조회시 조인을 많이 사용 → 성능저하
쿼리가 복잡해짐
데이터 저장시 insert 2번 호출
- 단일 테이블
장점 : 조인X , 성능빠름 , 조회쿼리 단순
단점 : 데이터가 들어간 자식 빼곤 다 Null 허용
한 테이블에 다 때려박기 때문에 상황에 따라서 조회 성능이 오히려 느려질 수 있다.
- 구현 클래스마다 테이블 (실무에서 사용하면 안됨)
* @MappedSuperClass
- 상속 관계 매핑 아님
- 공통 매핑 정보가 필요할 때 사용 (중복 변수)
ex) String id; String name;
- 엔티티 X , 테이블과 매핑 X
- 조회, 검색 불가 (em.find(BaseEntity))
- 직접 생성해서 사용할 일이 없으므로 추상 클래스 권장