연관 관계 매핑 > 스프링 부트

본문 바로가기

[이론] 연관 관계 매핑

필기자
2022-11-07 12:30 4,700 0

본문

엔티티들은 대부분 다른 엔티티와 연관 관계를 맺으며, JPA에서는 엔티티에 연관 관계를 매핑해두고 필요할 때 해당 엔티티와 연관된 엔티티를 사용하여 좀 더 객체지향적으로 프로그래밍할 수 있도록 도와줌.

 

객체는 참조로 연관 관계 형성, 테이블으 외래키로 연관 관계 형성

 

[ERD] 관계 표현

20221107133713_b7e01d0501d844f992b5c6d5592b1e1a_1r98.png

 

[테이블 관계 예 : 일대 다(참조 Null 허용)]

  1. 회사원이 꼭 부서에 소속될 필요는 없다.
  2. 한개의 부서에 여러 회사원이 소속 될 수 있다.
  3. 한개의 부서에 소속된 회사원이 한명도 없을 수 있다.

20221107133429_b7e01d0501d844f992b5c6d5592b1e1a_npp5.png


[객체간 관계]

20221107134913_b7e01d0501d844f992b5c6d5592b1e1a_hk3e.png

 

객체 연관관계 vs 테이블 연관관계

  1. 객체는 참조(주소)로 연관관계 
  • 연관 데이터 조회 시 .get() (참조) 사용 > 단방향
  • 객체 그래프 탐색
  1. 테이블은 외래 키로 연관관계
  • 연관 데이터 조회 시 JOIN 사용 > 양방향

* 객체를 양방향으로 참조하려면 단방향 연관관계를 2개 만들어야 함.

 

참조를 통한 연관관계는 언제나 단방향임. 객체간에 연관관계를 양방향으로 만들고 싶으면 반대쪽에도 필드를 추가해서 참조를 보관해야함. 이것은 양방향 관계가 아니라 서로 다른 단방향 관계 2개 임.

 

연관 관계 매핑 종류 : 다중성(Multiplicity) 

  1. 일대일(1:1) : @OneToOne
  2. 일대다(1:N) : @OneToMany
  3. 다대일(N:1) : @ManyToOne
  4. 다대다(N:M) : @ManyToMany

 

연관 관계 매핑 방향(Direction)

  1. 단방향
  • 테이블은 외래키를 기반으로 테이블간 양방향으로 JOIN이 가능. 객체의 참조는 항상 단방향.
  1. 양방향
  • 객체는 항상 단방향 참조만 가능하며 양방향은 객체간 단방향을 서로 가지게 하는 일종의 페이크임.

 

연관 관계의 주인(Owner)

  1. 양방향일 때, 연관 관계에서 관리 주체
  • 객체간 양방향 으로 방향성을 가질때 연관관계에 있어 누가 주인 인가를  결정.
  • 테이블 기준 누가 FK를 가져야 하는가의 문제임. 연관관계의 주인인 엔티티가 FK를 업데이트 함.

댓글목록0

등록된 댓글이 없습니다.
게시판 전체검색