자바/JPA

JPA : 상속관계 매핑

류창 2022. 6. 15. 21:22
반응형

 

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