• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

여러 계층의 상속관계 질문

23.07.10 21:26 작성 23.07.10 21:30 수정 조회수 456

0

엔티티멀티레벨상속예시.jpg안녕하세요.

상속관계 매핑을 할 때 예를 들어 위와 같이 Item을 상속받는 Book, Album, Movie, TVSerise의 4개의 품목이 있다고 했을 때, 비슷한 속성끼리 중간에 묶는 방법에 대해 질문드리고 싶습니다.

상속관계를 한 단계 더 쓰고 싶은 이유는 일부 항목들끼리는 자주 엮어서 조회할 일이 있는데 그 때마다 두 객체를 모두 불러오는 게 번거롭게 느껴져서 입니다.

이전에 비슷한 질문을 드렸었는데 김영한 강사님께서 이런 경우 상속관계보다는 연관관계를 사용하기를 추천하신다고 말씀 주셨었어요. 조금만 더 자세히 설명 부탁드리겠습니다.

감사합니다!

ps. 다른 글에서 추천해주신 draw.io 좋아요. 감사합니다.

답변 1

답변을 작성해보세요.

0

David님의 프로필

David

2023.07.11

안녕하세요. 아름님, 공식 서포터즈 David입니다.

  1. 지금 공유해 주신 이미지는 이미 잘 묶어 놓으신 것 같은데 어떤 부분에서 도움이 필요하신걸까요?

  2. 상속관계가 아닌 연관관계를 사용하라는 것은 상속을 사용하지 않고 별도의 클래스로 설계한 뒤 각각의 클래스를 연관관계로 매핑하라는 것입니다. 예를 들어, 이전에 질문 주신 내용에서 사과 엔티티가 음식, 과일 테이블에 모두 포함되었으면 한다고 하셨는데, 상속관계를 사용하지 않고(객체지향적인 부분에서 트레이드오프 발생) 독립적인 클래스로 만드는 것입니다.

감사합니다.

아름님의 프로필

아름

질문자

2023.07.11

  1. 위 객체 다이어그램을 JPA로 구현할 때 어떻게 매핑해야 하는지 입니다.

예를 들어서 그림에서 중간에 있는 video가 없으면 상속 전략을 SingleTable, JoinedTable, TablePerClass 중 어떤 전략이든지 무방하지만 video에 어떤 애너테이션을 매핑해줘야 하는걸까요?

David님의 프로필

David

2023.07.12

예를 들어, 싱글테이블 전략을 사용하신다면 Book, Album, Video, Movie, TVSeries에 모두 @DiscriminatorValue()만 붙여주시고 이름만 서로 다르게 지정해 주시면 매핑할 수 있습니다.

아름님의 프로필

아름

질문자

2023.07.12

'예를 들어, 싱글테이블 전략을 사용하신다면 Book, Album, Video, Movie, TVSeries에 모두 @DiscriminatorValue()만 붙여주시고 이름만 서로 다르게 지정해 주시면 매핑할 수 있습니다.'

라고 답변 주셨는데

저는 중간의 video 클래스에 어떤 매핑을 해줘야 하는지를 여쭤본겁니다.

말씀주신 상황은 수업에도 나오고 위 답변에도 제가 직접 말씀드린 것 같아요.

David님의 프로필

David

2023.07.13

예를 들어서 그림에서 중간에 있는 video가 없으면 상속 전략을 SingleTable, JoinedTable, TablePerClass 중 어떤 전략이든지 무방하지만 video에 어떤 애너테이션을 매핑해줘야 하는걸까요?

...

저는 중간의 video 클래스에 어떤 매핑을 해줘야 하는지를 여쭤본겁니다.

라고 말씀하신 것을 저는 다음과 같이 이해했습니다.
멀티레벨 상속구조를 갖게 되는데, video 에는 어떤 애노테이션을 사용해서 매핑해야 하는가?

그래서 아래와 같이 답변했습니다.

예를 들어, 싱글테이블 전략을 사용하신다면 Book, Album, Video, Movie, TVSeries에 모두 @DiscriminatorValue()만 붙여주시고 이름만 서로 다르게 지정해 주시면 매핑할 수 있습니다.

 

Video도 다른 것들과 동일하게 @DiscriminatorValue() 를 붙이면 된다고 말씀드렸는데, 제가 잘못 이해한 부분이 있다면 조금 더 자세히 설명해 주실 수 있으실까요?

 

조금 더 명확하게 설명드리자면 Item에 singletable 전략을 명시해 주시고, Video도 다른 것들과 동일하게 @DiscriminatorValue을 사용하시면 됩니다. video가 상속구조를 갖기 때문에 item과 같이 별도의 상속구조를 위한 매핑 전략을 명시하지 않아도 됩니다.

아름님의 프로필

아름

질문자

2023.07.14

너무 잘됩니다 감사합니다ㅠ