본문 바로가기

JPA

05 연관관계 매핑

- 방향 : [단방향, 양방향]이 있다. 한쪽만 참조하는 것을 단방향 관계라고 하고 (회원 -> 팀), 양쪽 서로 참조하는 것을 양방향관계 라고 한다. (회원 -> 팀, 팀 -> 회원). 방향을 객체관계에만 존재하고 테이블에서는 항상 양방향이다.

 

- 다중성 : [다대일, 일대다, 일대일, 다대다] 다중성이 있다. 예를 들어 회원과 팀의 관계가 있을 때, 여러 회원은 한팀에 속하므로 회원과 팀은 다대일 관계이다. 반대로 한팀에 여러 회원이 소속될 수 있으므로 팀과 회원은 일대다 관계이다.

 

- 연관관계 주인:

- 엔티티를 양방향 연관관계로 설정하면 객체의 참조는 둘인데 외래키는 하나이다. 따라서 둘사이에 차이가 발생한다.

- 두 객체 연관관계 중 하나를 정해서 테이블의 외래키를 관리해야 하는데 이를 연관관계 주인이라고 한다.

- 객체를 양방향 연관관계로 만들면 연관관계의 주인을 정해야한다.

- 연관관계 주인만이 데이터베이스 연관관계와 매핑되고 외래키를 (등록, 수정, 삭제)할 수 있다. 반면에 주인이 아닌 쪽은 읽기만 가능하다.

- 주인은 mappedBy 속성을 사용하지 않는다.

- 주인이 아니면 mappedBy 속성을 사용해서 속성의 값으로 연관관계 주인을 지정해야 한다.

 

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

- 객체는 참조로 연관관계를 가진다.

- 테이블은 외래키로 연관관계를 가진다.

 

- 단방향 매핑으로 테이블과 객체의 연관관계 매핑은 이미 완료 되었다.

- 단방향을 양방향으로 만들면 반대방향으로 객체 그래프 탐색 기능이 추가된다.

- 양방향 연관관계를 매핑하려면 객체에서 양쪽 방향을 모두 관리해야 한다.

'JPA' 카테고리의 다른 글

6.1 다대일  (0) 2021.01.11
7.3 복합키와 식별관계 매핑  (0) 2021.01.10
기본키 매핑방식  (0) 2021.01.10
hibernate.ejb.naming_strategy  (0) 2021.01.10
hibernate.hbm2ddl.auto 속성  (0) 2021.01.10