inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

해결된 질문

634

아름

작성한 질문수 6

0

안녕하세요.

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

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

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

감사합니다.

java jpa

답변 2

1

김영한

안녕하세요. 아름님

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

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

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

감사합니다.

1

인프런 AI 인턴

안녕하세요, 인프런 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)의 매핑 관련 문서를 참고하시기 바랍니다. 감사합니다!

Entity 동등성 비교

0

2

1

실무 조언 관련 질문입니다.

0

41

1

H2데이터베이스 파일 생성

0

51

2

서브쿼리 강의에서 ALL 예시 관련 질문드립니다.

0

49

2

수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?

0

48

1

JPQL 메소드와 락

0

52

1

Delivery @OneToOne

0

57

1

17강 4~5분대 테이블 값 조회가 안됩니다.

0

89

2

UnsupportedOperationException 발생

0

82

3

H2 Database 연결이 안됩니다.

0

88

2

연관관계 매핑 질문드립니다.

0

82

2

h2데이터베이스 실행오류

0

105

2

persistence.xml

0

103

2

양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?

0

77

1

영속성 컨텍스트

0

62

1

JPA 프록시

0

90

1

Native Query와 MyBatis

0

63

1

영속성 컨텍스트는 어떤 메모리에 저장되는건가요?

0

83

1

임베디드 타입 예시 코드 관련 질문

0

112

3

명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요

0

90

3

인텔리제이 패키지 커서 단축키 질문

0

106

2

혹시 현재는 ID 데이터 타입이 String이면 안되나요?

0

136

1

양방향 연관관계 시 연관관계 주인을 설정하는 이유

0

68

1

임베디드 타입과 MappedSuperClass의 차이점이 궁금합니다.

0

95

1