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

권영훈님의 프로필 이미지
권영훈

작성한 질문수

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

실전 예제 4 - 상속관계 매핑

고급매핑 - 실전예제4 상속관계 매핑 관련 문의 드립니다.

해결된 질문

작성

·

243

1

안녕하세요~ 영한님! 강의 잘 보고 있습니다~

예제에서는 SINGLE_TABLE 상속 정책을 가져가서 Item 테이블에 BaseEntity의 필드들이 추가된 걸 확인했었는데요.

JOINED 상속 정책을 가져가는 경우, Item에는 BaseEntity가 추가되지만, Item을 상속받는 Album, Book, Movie 매핑 테이블에는 BaseEntity가 추가되지 않습니다.

키는 Item에 있고 조인해서 확인이 가능하니 필수 필드는 아니겠지만, 현업(DBA)에서 Album, Book, Movie에도 BaseEntity에 포함된 필드들이 필요하다고하는 경우도 예상해 볼 수 있을 것 같습니다.

현재 예제에서는 다중 상속이 안 되어 불가할텐데, 혹시 유사한 케이스가 있었다면 팁 좀 부탁 드립니다~^^

감사합니다~

답변 1

6

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

반갑습니다. 영훈님^^

먼저 원칙적인 부분을 말씀드릴께요 :)

BaseEntity의 내용은 객체 관계에서 공통 데이터 상속을 목표로 하고 있습니다.

그래서 공통 데이터를 보관하는 ITEM 테이블에만 공통의 내용이 있는 것이 맞습니다.

추가로 JOINED 전략 자체가 공통은 ITEM에 두고 공통이 아닌 부분만 분리해서 별도의 테이블로 만드는 것입니다.

JOINED 전략은 이미 ITEM 테이블과 자식 테이블이 1:1 구조라는 것을 가정하기 때문에 BaseEntity의 내용은 ITEM 테이블에만 있는 것이 맞습니다. 공통인 부분은 필요하면 JOIN을 사용해서 ITEM에서 찾으면 되는 것이지요.

그런데 질문하신 것 처럼 DBA와 이슈가 있으면 어떻게 해야 할까요?

예를 들어서 변경시간이라는 공통 데이터가 있다면, ITEM 테이블에만 이 데이터를 두고, DBA와 협의할 때 ITEM의 자식 테이블(ALBUM, BOOK, MOVIE)이 변경되어도 ITEM 테이블에 있는 변경시간으로 일관성있게 관리하고, 그것에 대해서 애플리케이션 개발팀에서 책임을 지겠다라고 협의를 하시면 될 것 같습니다.

만약 그게 안되면... (때로는 양보도 필요하니까요.)

그냥 값 객체(EmbeddedType, Value Object)를 만들어서 공통 부분을 각각의 Album, Book, Movie 객체에 포함하는 것 정도가 대안일 것 같습니다.

감사합니다^^!

권영훈님의 프로필 이미지
권영훈

작성한 질문수

질문하기