본문 바로가기
Back-end

다양한 연관관계 매핑

by 신재권 2022. 9. 15.

연관관계 매핑

연관관계를 매핑할 때는 3가지 고려

  • 다중성
  • 단방향, 양방향
  • 연관관계의 주인

다중성

  • 다대일
  • 일대다
  • 일대일
  • 다대다

단방향, 양방향

객체 관계에서 한쪽만 참조하는 것을 단방향, 양쪽이 서로 참조하는 것을 양방향

연관관계의 주인

외래키를 관리하는 곳

연관관계의 주인이 아니면 mappedBy 속성을 사용하고 연관관계의 주인 필드 이름을 값으로 입력해야 한다.

다대일

데이터베이스 테이블의 일대다 관계에서는 외래키는 항상 다쪽에 있다. 객체 양방향 관계에서 연관관계의 주인은 항상 다 쪽이다.

양방향 설정시 다쪽이 연관관계의 주인

양방향 연관관계는 항상 서로를 참조해야 한다.

무한루프에 빠지지 않도록 조심해야 한다.

일대다

다대일 관계의 반대 방향

Collection, List, Set, Map 중에 하나를 사용

일대다 단방향 매핑의 단점 : 매핑한 객체가 관리하는 외래키가 다른 테이블에 있다. → 필요없는 SQL이 추가로 실행

  • 일대다 단방향 매핑보다는 다대일 양방향 매핑을 사용

일대다 양방향 매핑은 존재하지 않는다.

일대일

양쪽이 서로 하나의 관계만을 가진다.

  • 일대일 관계의 반대도 일대일 관계
  • 테이블 관계에서 일대다, 다대일은 항상 다쪽이 외래키를 가지는데, 일대일은 주 테이블이나 대상 테이블 중 어느곳이나 외래키를 가질 수 있다.
  • 주 테이블에 외래키
    • 외래키를 객체 참조와 비슷하게 사용할 수 있어 선호
    • 주 테이블이 외래키를 가지고 있으므로 주 테이블만 확인해도 대상 테이블과 연관관계가 있는지 알 수 있다.
  • 대상 테이블에 외래키
    • 일대일에서 일대다로 변경할때 테이블 구조를 유지할 수 있다.

양방향 관계에서는 연관관계의 주인을 정해야 한다. 주로 주 테이블이 주인

다대다

관계형 데이터베이스는 정규화된 테이블 2개로 다대다 관계를 표현할 수 없다.

그래서 다대다 관계를 일대다, 다대일 관계로 풀어내는 연결 테이블을 사용한다.

양방향 관계일 경우 mappedBy로 연관관계의 주인을 지정

→ 다대일 일대다 다대일 테이블로 풀어서 한다.

일대다 테이블은 @IdClass를 사용해 복합 기본키를 매핑

  • 복합 키는 별도의 식별자 클래스로 만들어야 한다.
  • Serializable을 구현해야 함
  • equals, hashCode를 구현해야 함
  • 기본 생성자가 있어야 함
  • 식별자 클래스는 public
  • @EmbeddedId를 사용하는 방법도 있다.

식별 관계

부모 테이블의 기본키를 받아서 자신의 기본 키 + 외래 키로 사용하는 것을 식별관계라고 한다.

→ 이를 해결하는 방법은 새로운 대리키를 사용

  • 식별 관계 : 받아온 식별자를 기본키 + 외래키로 사용
  • 비식별 관계 : 받아온 식별자는 외래키로만 사용하고 새로운 식별자를 추가

@JoinTable

  • name : 연결 테이블 지정
  • joinColumns : 매핑할 조인 컬럼 정보를 지정
  • inverseJoinColumns : 반대 방향 조인 컬럼 정보를 지정
출 처 : 자바 ORM 표준 JPA 프로그래밍 - 김 영 한

'Back-end' 카테고리의 다른 글

Session 이란?  (0) 2022.10.17
[Spring Security] 스프링 시큐리티  (0) 2022.10.17
연관관계 매핑 기초  (0) 2022.09.14
엔티티 매핑  (0) 2022.09.07
JWT 토큰  (0) 2022.09.05