인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

아름님의 프로필 이미지
아름

작성한 질문수

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

상속관계가 두 개 이상일 때 매핑 질문

해결된 질문

작성

·

544

·

수정됨

0

안녕하세요.

하나의 엔티티가 두 개 이상의 상위 엔티티에 속하는 경우 어떻게 구현해야 하는지 질문드립니다.

예를 들어서 사과라는 엔티티가 과일에도 속하고 음식에도 속한다고 했을 때,

DB에서는 사과엔티티를 과일테이블과 음식테이블이라는 두 개의 싱글테이블의 행으로 표현할 수 있지만 객체모델링에서는 사과가 반드시 하나의 엔티티 클래스를 상속해야하기 때문에 어떻게 모델링해야 하는지 모르겠습니다.

감사합니다.

답변 2

1

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

안녕하세요. 아름님

이런 경우에는 상속 관계로 푸는 것 보다는 연관관계로 푸는 것이 나은 선택이라 생각합니다.

사과가 과일, 음식과 연관관계를 가지도록 하면 됩니다.

참고로 JPA에서 사용하는 상속관계는 DB의 서브타입 슈퍼타입 관계를 풀어낼 때 사용할 수 있습니다.

감사합니다.

1

안녕하세요, 인프런 AI 인턴이에요.

하나의 엔티티가 두 개 이상의 상위 엔티티에 속할 때는 다중 상속이 필요하게 됩니다. 객체지향 프로그래밍에서는 다중 상속을 지원하지 않는 경우가 많기 때문에 매핑 방법을 잘 선택해야 합니다.

사과 엔티티의 경우, 한 개의 엔티티 클래스를 상속하는 대신 상속 관계를 매핑하여 모델링할 수 있습니다. 그 중 하나의 방법은 조인 테이블을 이용하는 것입니다. 과일과 음식 테이블에 대한 외래키를 가진 별도의 조인 테이블을 생성하여 사과 엔티티랑 매핑할 수 있습니다.

예를 들어, 다음과 같이 매핑할 수 있습니다:

@Entity
@Table(name = "사과")
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Apple {
    // 사과 엔티티에 대한 공통 속성
    // ...
}

@Entity
@Table(name = "과일")
public class Fruit extends Apple {
    // 과일 엔티티에 대한 속성
    // ...
}

@Entity
@Table(name = "음식")
public class Food extends Apple {
    // 음식 엔티티에 대한 속성
    // ...
}

이렇게 한 후에, 사과 엔티티에 대한 질의를 할 때에는 사과 엔티티의 관련 속성에 대한 조건을 추가하여 과일 테이블이나 음식 테이블에서 필요한 정보를 가져오면 됩니다.

다중 상속을 매핑하는 방법은 다양한 방법이 존재하며, 상황에 따라 가장 적합한 방법을 선택해야 합니다. 위의 예시는 조인 테이블을 사용한 간단한 예시로, 실제 상황에 맞게 적용해보셔야 합니다.

더 자세한 정보는 JPA (Java Persistence API)의 매핑 관련 문서를 참고하시기 바랍니다. 감사합니다!

아름님의 프로필 이미지
아름

작성한 질문수

질문하기