ORM에서의 상속관계 매핑 == 객체의 상속 구조와 데이터베이스의 슈퍼타입 서브타입 관계 매핑
구현방법
● 각각의 테이블로 변환 (= JPA 조인 전략)
○ @PrimaryKeyJoinColumn, @DiscriminatorColumn, @DiscriminatorValue
● 통합 테이블로 변환 (= JPA 단일 테이블 전략)
○ 자식 엔티티가 매핑한 컬럼은 모두 null을 허용해야함
○ DiscriminatorColumn 필수
● 서브타입 테이블로 변환 (= JPA 구현 클래스마다 테이블 전략)
상속 매핑은 부모 클래스에 @Inheritance.매핑전략 사용
@MappedSupperclass : 실제 테이블과 매핑하지 않고 단순히 매핑 정보를 상속할 목적으로 사용
→ 부모 클래스는 테이블과 매핑하지 않고 부모 클래스를 상속 받는 자식 클래스에게 매핑 정보만 제공할 때 사용
→ 직접 생성해서 사용할 일은 거의 없으므로 추상 클래스로 만드는 것이 권장됨
@AttributeOverrides, @AttributeOverride : 부모로부터 물려받은 매핑 정보를 재정의
@AssociationOverrides, @AssociationOverride : 부모로부터 물려받은 연관관계 재정의
외래 키가 기본 키에 포함되는 지 여부
식별 관계 : 부모 테이블의 기본 키를 내려받아서 자식 테이블의 기본 키 + 외래 키로 사용하는 관계
비식별 관계 : 부모 테이블의 기본 키를 받아서 자식 테이블의 외래 키로만 사용하는 관계
비식별 관계에서 외래 키에 NULL을 허용하는지 여부
● 필수적 비식별 관계(Mandatory) : 외래 키에 NULL 허용하지 않음. 연관관계를 필수적으로 맺어야 함
● 선택적 비식별 관계(Optional) : 외래 키에 NULL 허용. 연관관계 맺을지 말지 선택가능
→ 선택적 비식별 관계는 NULL을 허용하므로 조인 시에 외부 조인을 사용해야하기 때문에 필수적 비식별 관계가 더 좋음
→ 최근에는 비식별 관계를 주로 사용 + 꼭 필요한 곳에만 식별 관계 사용
식별자 필드가 2개 이상인 경우
→ 별도의 식별자 클래스 만들고 그곳에 equals와 hasCode 구현 필요
● IdClass
[조건]
○ 식별자 클래스의 속성명과 엔티티에서 사용하는 식별자의 속성명이 같아야함
○ Serializable 인터페이스를 구현해야함
○ equals, hashCode를 구현해야함
○ 기본 생성자가 있어야 함
○ 식별자 클래스는 public 이어야 함
● EmbeddedId
[조건]
○ @Embeddable 어노테이션을 붙여주어야 함
○ Serializable 인터페이스를 구현해야함
○ equals, hashCode를 구현해야함
○ 기본 생성자가 있어야 함
○ 식별자 클래스는 public 이어야 함
@IdClass는,
식별 관계의 경우, 기본 키와 외래 키를 같이 매핑해야함. 따라서 식별자 매핑인 @Id와 연관관계 매핑인 @ManyToOne을 같이 사용함
@EmbeddedId는,
식별 관계의 경우, 식별 관계로 사용할 연관관계의 속성에 @MapsId 사용
출처
https://product.kyobobook.co.kr/detail/S000000935744
자바 ORM 표준 JPA 프로그래밍 | 김영한 - 교보문고
자바 ORM 표준 JPA 프로그래밍 | 자바 ORM 표준 JPA는 SQL 작성 없이 객체를 데이터베이스에 직접 저장할 수 있게 도와주고, 객체와 관계형 데이터베이스의 차이도 중간에서 해결해준다. 이 책은 JPA
product.kyobobook.co.kr
'Spring' 카테고리의 다른 글
길벗 코딩 자율 학습단 5주차 (0) | 2025.05.14 |
---|---|
프록시와 연관 관계 관리 (0) | 2025.05.11 |
길벗 코딩 자율 학습단 4주차 (1) | 2025.05.04 |
길벗 코딩 자율 학습단 3주차 (1) | 2025.04.23 |
길벗 코딩 자율 학습단 2주차 (1) | 2025.04.16 |