Java에선 부모클래스 와 자식클래스간의 상속관계라는것이 존재한다.
하지만, DB에선 상속관계가 없다. 비슷한 개념으로는 슈퍼클래스와 ,서브클래스 라는 개념이있다.
여기서 등장하는것이 JPA가 스프링단에 있는 상속관계와 DB단에있는 슈퍼,서브클래스 관계를 매핑해주는 기능을 지원해준다.
@Inheritance
상속관계를 나타내려면, @Ingeritance 어노테이션을 사용한다.
@Ingeritance는 부모에게만 붙는다.
• JOINED: 조인 전략
• SINGLE_TABLE: 단일 테이블 전략
• TABLE_PER_CLASS: 구현 클래스마다 테이블 전략
상속을 받는전략은 이 3가지가 존재한다.
하지만, JOINED 전략만 사용하는걸 추천한다.
단일테이블 같은경우는 하위클래스의 모든 정보를 담기때문에 테이블이 무진장커지고, 성능이 더 나빠질수도있다.
구현 클래스마다 테이블 전략은, 하위클래스에다가 부모정보를 모두 주입시켜서 관리하는것인데,
이것도 성능이 매우나쁘다.
@DiscriminatorColumn , @DiscriminatorValue
@DiscriminatorColumn은 부모가 하위클래스를 구분하기위한 컬럼을 제공한다.
디볼트값으론 'DType'을 제공한다. 다른걸로 설정하고싶다면 name= ' ' 으로 설정하자.
@DiscriminatorValue는 하위클래스에서 구분당할 명칭을 설정한다.
--------------------------------------------------------------------------------------------------------------------------------------
@MappedSuperclass
번외로, 하나 더 상속관계와 비슷한 공통속성 공유관계를 매핑해주는 기능이있다.
바로, @MappedSuperclass이다.
예를들어, 자주쓰는 속성조합이 있다고 치면 (id,name) 또는 (HP,MP,SP)를 따로 클래스를만들어서
넣어줄수있다.
• 상속관계 매핑X
• 엔티티X, 테이블과 매핑X
• 부모 클래스를 상속 받는 자식 클래스에 매핑 정보만 제공
• 조회, 검색 불가(em.find(BaseEntity) 불가)
• 직접 생성해서 사용할 일이 없으므로 추상 클래스 권장
'자바 > JPA' 카테고리의 다른 글
스프링 JPA Querydsl 소개 (0) | 2022.07.25 |
---|---|
JPA 값타입 (0) | 2022.06.27 |
JPA: 연관관계 매핑 (1:1 , 1:N, N:1, N:M) (0) | 2022.06.14 |
JPA: 엔티티(Entity) 매핑 (0) | 2022.06.14 |
JPA 의 기초(CRUD) 다루어보기 (0) | 2022.01.07 |