-> PARENT 테이블의 기본 키 PARENT_ID 를 받아서,
CHILD 테이블의 기본 키 (PK) + 외래 키 (FK) 로 사용 한다.
2-A. 필수적 비식별 관계
![]()
- 외래 키에 NULL 을 허용하지 않는다. 연관관계를 필수로 맺어야 한다.
2-B. 선택적 비식별 관계
- 외래 키에 NULL 을 허용한다. 연관관계를 선택적으로 맺을 수 있다.
- JPA 에서 식별자를 둘 이상 사용하려면 별도의 식별자 클래스를 만들어야 한다.
JPA 가 복합키를 지원하는 2가지 방법- JPA 는 영속성 컨텍스트에 엔터티를 보관할 때 엔터티의 식별자를 키로 사용한다. 그리고 식별자를 구분하기 위해 equals 와 hashCode 를 사용해서 동등성을 비교한다.
@IdClass: 관계형 데이터베이스에 가까운 방법@IdClass 사용시 만족해야 할 조건 1. 식별자 클래스의 속성명과 엔터티에서 사용하는 식별자의 속성명은 같아야 한다. 2. Serializable 인터페이스를 구현해야 한다 3. equals, hashCode 를 구현해야 한다. 4. 기본 생성자가 있어야 한다. 5. 식별자 클래스는 public 이어야 한다.
@2EmbeddedId: 객체 지향에 가까운 방법
@2EmbeddedId를 적용한 식별자 클래스는 식별자 클래스에 기본 키를 직접 매핑한다.
식별 관계
- 부모 테이블의 기본 키를 자식 테이블로 전파하면서 자식 테이블의 기본 키 컬럼이 점점 늘어난다.
-> 조인할때 SQL 이 복잡해지고 기본 키 인덱스가 불필요하게 커질 수 있다.- 식별 관계는 2개 이상의 컬럼을 합해서 복합 기본 키를 만들어야 하는 경우가 많다.
- 식별 관계를 사용할 때 기본 키로 비즈니스 의미가 있는 자연 키 컬럼을 조합하는 경우가 많다.
- 식별 관계의 자연 키 컬럼들이 자식에 손자까지 전파되면 변경하기 힘들다.
- 식별 관계는 부모 테이블의 기본 키를 자식 테이블의 기본 키로 사용하므로 비식별 관계보다 테이블 구조가 유연하지 못하다.
비식별 관계
- 비식별 관계의 기본 키는 비즈니스와 전혀 관계없는 대리 키를 주로 사용한다.
- 비식별 관계의 기본 키는 주로 대리 키를 사용하는데 JPA 는
@GenerateValue처럼 대리 키를 생성하기 위한 편리한 방법을 제공한다.