인프런 커뮤니티 질문&답변

창신동 장첸님의 프로필 이미지

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

상속관계 매핑

p.245 상속관계 맵핑 3가지 방법 질문

21.08.09 07:41 작성

·

153

0

조인/ 단일테이블 / 구현클래스마다 테이블 이 세가지 전략에 대한 소스코드를 교재에서 확인할 수 있는데요

세 전략 모두 Item 클래스를 추상클래스로 선언했음에도 아래와 같은 차이를 보입니다.

'조인' / '단일테이블' 의 경우에는 ITEM 테이블이 생성된 반면,[그림7.3, 그림7.4]

'구현클래스마다 테이블'에서는 ITEM 테이블이 생성되지 않는 것으로 이해되고 있습니다.[그림 7.5]

왜 이런 차이를 발생시키는 것인지 궁금합니다.

별개로, 강의에서는 '조인'/'단일테이블' 설명하실 때 Item클래스를 추상클래스로 선언하지 않으셔서 이 부분도 혼동을 주고있습니다.

답변 1

0

김영한님의 프로필 이미지
김영한
지식공유자

2021. 08. 09. 21:44

안녕하세요. kelixo Do님

먼저 추상을 선언하는 것과 테이블 전략 3가지는 무관합니다.

구현 클래스마다 테이블 전략은 ITEM과 관련된 테이블을 생성하지 않는 방법입니다. (추상 선언과 무관합니다.)

단일테이블이나, 조인 전략은 ITEM과 관련된 부분을 하나로 모은다면, 구현 클래스마다 테이블 전략은 ITEM의 내용을 각각에 BOOK, ALBUM등에 다 뿌리는 방법입니다.

추상으로 선언하면 Item 클래스를 직접 적으로 생성하는 것이 막을 수 있기 때문에 추상으로 선언하는 것이 더 나은 선택입니다.

감사합니다.

창신동 장첸님의 프로필 이미지

2021. 08. 31. 00:39

선생님, 22분18초 부분에서 Single_TABLE 전략을 사용할 때 ALBUM, MOVIE, BOOK 테이블 모두 (일반class로 선언했음에도)생성되지 않는 것을 통해 abstract유무가 아닌 어떤 테이블전략을 선택했는지가 ITEM테이블 유무를 결정한다는 것을 이해했습니다.

그러나 한 가지 상충되는 부분이 있는것 같아 추가로 질문드려봅니다.

강의27분10초)  구현클래스마다테이블전략에서는 ITEM테이블이 생성됐습니다. 테이블 생성유무가 abstract과 무관하게 전략에 따라 결정된다고 하면 다음과 같이 예상할 수 있을 것입니다.

Item엔티티를  public class Item으로 정의를 해도 테이블전략이 'TABLE_PER_CLASS' 이므로 ITEM테이블이 생성되면 안 된다.

그러나 강의실습에서 abstract로 변경을 해줘서 원했던 결과를 얻어냈습니다. 

두 상황을 놓고 볼 때 어떻게 이해를 하면 좋을지 헷깔립니다.

조언부탁드립니다.

감사합니다.

김영한님의 프로필 이미지
김영한
지식공유자

2021. 08. 31. 23:23

안녕하세요. ddoddo님

테이블 생성 전략을 어떻게 선택할지와 추상 클래스는 서로 다른 개념입니다.

추상으로 만들지 않으면 new Item()을 생성할 수 있기 때문에 관련해서 테이블도 하나가 더 만들어진다고 생각하시면 됩니다. 그런데 TABLE_PER_CLASS 자체를 실무에서 사용하지 않기 때문에 이 부분에 대해서는 너무 고민하지 않으셔도 됩니다.

감사합니다.

창신동 장첸님의 프로필 이미지

2021. 09. 01. 02:02

네 답변 감사합니다.