들어가며
7강은 1편과 2편으로 나눠 진행하였다.
7.4 조인 테이블
- 디비 테이블의 연관관계를 설계하는 방법 크게 2가지
- 조인 컬럼 사용 (외래 키)
- 조인 테이블 사용 (테이블 사용)
- 조인 컬럼 사용
- 테이블 간에 관계는 주로 조인 컬럼이라 부르는 외래 키 컬럼을 사용해서 관리
- 예를 들어 회원과 사물함이 있을 때 회원이 사물함을 사용하기 전까지는 외래 키에 null을 입력해두어야 하고 이러한 외래 키에 null을 허용하는 관계를 선택적 비식별 관계라 함
- 선택적 비식별 관계는 외래 키에 null을 허용하므로 조인 시 외부 조인을 사용해야 한다.
- 실수로 내부 조인을 하면 사물함과 관계가 없는 회원은 조회되지 않는다.
- 그리고 회원과 사물함이 아주 가끔 관계를 맺는다면 외래 키 값 대부분이 null로 저장되는 단점 존재
- 조인 테이블 사용
- 조인 테이블이라는 별도의 테이블을 사용해서 연관관계 관리
- 조인 컬럼 방법은 단순 히 외래 키 컬럼만 추가해서 연관관계를 맺지만 조인 테이블을 사용하는 방법은 연관관계를 관리하는 조인 테이블을 추가하고 여기서 두 테이블의 외래 키를 가지고 연관관계를 관리한다
- 회원과 사물함 테이블에는 외래키가 존재하지 않는다.
- 조인 테이블을 방법을 사용하게 되면 테이블이 하나 더 생기므로 관리해야 되는 테이블이 늘어나고 조인 시 조인 테이블까지 추가로 조인해야한다.
- 객체와 테으블을 매핑할 때 조인 컬럼은 @JoinColumn으로 매핑하고 조인테이블은 @JoinTable로 매핑한다.
- 조인 테이블은 주로 다대다 관계를 일대다, 다대일 관계로 풀어내기 위해 사용
- 그렇지만 일대일, 일대다, 다대일 관계에서도 사용하기도 함
7.4.1 일대일 조인 테이블
- 일대일 관계를 만들려면 조인 테이블의 외래 키 컬럼 각각에 총 2개의 유니크 제약 조건을 걸어야 한다.
- 부모 엔티티에 @JoinColumn 대신 @JoinTable 사용
- @JoinTable 속성
- name : 매핑할 조인 테이블 이름
- joinColumns : 현재 엔티티를 참조하는 외래키
- inverseJoinColumns : 반대방향 엔티티를 참조하는 외래 키
- 양방향 매핑 원할 시 자식 엔티티에 @OneToOne(mappedBy = “child”) 추가
7.4.2 일대다 조인 테이블
- 일대다 관계를 만들려면 조인 테이블의 컬럼 중 다와 관련된 컬럼인 자식_ID에 유니크 제약 조건을 걸어야 한다.
- 일대다 단방향 조인 테이블 매핑
7.4.3 다대일 조인 테이블
- 다대일은 일대다에서 방향만 반대이므로 조인 테이블 모양은 일대다에서의 테이블과 동일하다.
7.4.4 다대다 조인 테이블
- 다대다 관계를 만들려면 조인 테이블의 두 컬럼을 합해서 하나의 복합 유니크 제약조건을 걸어야 한다.
- 조인 테이블에 컬럼을 추가하면 @JoinTable 전략을 사용할 수 없다. 대신에 새로운 엔티티를 만들어서 조인 테이블과 매핑해야 한다.
7.5 엔티티 하나에 여러 테이블 매핑
- 잘 사용하지 않지만 사용하기 위해서 @SecondaryTable을 사용하면 된다
- 보드 엔티티는 @Table을 사용해서 매핑
- 보드 디테일은 @SecondaryTable을 사용해서 추가로 매핑
- @SecondaryTable 속성
- @SecondaryTable.name : 매핑할 다른 테이블의 이름
- @SecondaryTable.pkJoinColumns : 매핑할 다른 테이블의 기본 키 컬럼 속성
- 더 많은 테이블을 매핑할때는 @SecondaryTables 사용
- 추가적으로 @SecondaryTable을 사용해서 두 테이블을 하나의 엔티티에 매핑하는 것 보다 테이블당 엔티티를 각각 만들어서 일대일 매핑하는 것을 권장
'Book' 카테고리의 다른 글
자바 ORM 표준 JPA 프로그래밍 - JPA 정리하기 (8-2) 프록시와 연관관계 관리 (0) | 2022.09.10 |
---|---|
자바 ORM 표준 JPA 프로그래밍 - JPA 정리하기 (8-1) 프록시와 연관관계 정리 (0) | 2022.08.27 |
자바 ORM 표준 JPA 프로그래밍 - JPA 정리하기 (7-1) 고급매핑 (0) | 2022.08.17 |
자바 ORM 표준 JPA 프로그래밍 - JPA 정리하기 (6) 다양한 연관관계 매핑 (0) | 2022.08.12 |
자바 ORM 표준 JPA 프로그래밍 - JPA 정리하기 (5-2) 연관관계 매핑 기초 (0) | 2022.08.07 |
댓글