본문 바로가기
JAVA/SpringBoot

[김영한] 자바 ORM 표준 JPA 프로그래밍 - 섹션 5. 연관관계 매핑 기초 - 양방향 연관관계와 연관관계의 주인

by 설총이 2023. 10. 17.
양방향 매핑 엔티티 정의

@ManyToOne   <-> @OneToMany
@OneToMany   <-> @ManyToOne
@OneToOne     <-> @OneToOne
@ManyToMany <-> @ManyToMany
 

===> 양방향 관계라는 표현은 이해하기 쉽게 표현한 것이다.
실제로는 단방향 관계 2개를 선언한 것.
 

연관관계의 주인

==> DB의 외래키(FK:FOREIGN KEY) 기준으로 주인을 정한다.
주인: @XXXXXXXX @JoinColumn(name = 'DB 컬럼명')
종속: @XXXXXXXX(mappedBy == '주인 엔티티에 선언된 종속 필드명')
(추가설명내용)
TEAM을 주인으로 설정하는 것도 가능하지만 성능 이슈가 있어 사용하지 말라 설명합니다.
1) MEMBER 엔티티를 주인으로 했을때
-> MEMBER 테이블에는 TEAM_ID를 외래키로 가지고있어 SQL INSERT 한번으로 처리가 가능하지만,

2) TEAM 엔티티를 주인으로 했을때
-> TEAM 테이블에는 MEMBER 참조키가 없어 TEAM을 INSERT하고 MEMBER 테이블에 UPDATE구문이 나가는 SQL구문이 2번 사용되게 된다.

===> 하여 강좌를 진행한 김영한 선생님은 DB의 외래키를 가지고 있는 곳, 외래키를 가지고있는곳이 N(다)쪽으로 연관관계의 주인으로 설정하도록 가이드하고 있습니다.

양방향 매핑 시 가장 많이 하는 실수

 

객체 관계를 고려해 양쪽 다 값을 입력하도록 선언된 메소드 예시

- Member.class
   > changeTeam(Team team)

===> 순수한 객체 관계를 고려하면 항상 양쪽 다 값을 입력하도록 권장.