[JPA 긴급학습 (4)] 연관 관계 - 객체의 참조와 외래키의 차이
Intro
영한 아재 말에 따르면..
방향(Direction)
다중성(Multiplicity)
연관관계 주인(Owner)
개념을 설명한다.
(1) 방향
기디비 때 ER다이어그램에서 일대다 일대일 그 개념과 유사하지만 살짝 다른 느낌도 있다.
단지 여기서는 양쪽 테이블이 있을 때
ex)
참조관계가 오로지
회원-> 팀
아니면
팀 -> 회원
만의 경우라면 단방향이 되며,
회원->팀
팀->회원
이렇게 양쪽에서 모두 바라보고 있으면 양방향이 된다.
(2) 다중성
여기 개념이 기디비 때, 매핑카디널리티 일대다 다대다 하던 그 개념과 똑같다.
(3) 연관관계 주인
영한 아재 曰 : "객체를 양방향 연관관계로 만들면 연관관계의 주인을 정해야 한다."
1. 단방향 연관관계
(1) 객체 관점
public class Member {
Long id;
Team team;
String userName;
}
와
public class Team {
Long id;
String name;
}
이 있다고 가정하자.
Member 객체는 Member.team필드(멤버변수)로 Team객체와 연관관계를 맺는다.
이 코드에서 Member객체와 Team객체는 ★단방향★ 관계다. Member는 Team필드를 통해서 팀을 알 수 있지만, 거꾸로 Team에서는 Member를 알 수 없다.
예를 들어, member->team은 getTeam()으로 가능하지만 반대방향은 할 수 없다.
(2) 테이블 관점
create table MEMBER (
MEMBER_ID int PRIMARY KEY
TEAM_ID int foreign key
USERNAME text
)
와
create table TEAM (
TEAM_ID int PRIMARY KEY,
NAME text
)
가 있다고 가정하자.
MEMBER 테이블은 TEAM_ID 외래키로 TEAM 테이블과 연관관계를 맺는다.
MEMBER 테이블의 TEMA_ID로 TEAM 테이블과 JOIN할 수 있고 반대로 TEAM에서도 MEMBER와 JOIN 할 수 있다.
즉, MEMBER테이블의 TEAM_ID 외래키만으로 MEMBER ⋈ TEAM도 가능하고,
TEAM ⋈ MEMBER도 가능하다.
따라서 ★양방향★ 관계다.
(3) 객체 연관관계와 테이블 연관관계의 가장 큰 차이
참조를 통한 연관관계는 언제나 단방향이다. 객체 간에 연관관계를 양방향으로 만들고 싶으면 반대쪽에도 필드를 추가해서 참조를 보관해야한다.
결국 연관관계를 하나 더 만들어야한다. 이렇게 양쪽에서 서로 참조하는 것을 양방향 연관관계라고 한다.
하지만 더 정확히 얘기하면 ★양방향 관계가 아니라 단방향 관계 2개★다.
즉, 객체는 참조로 연관관계를 맺고, 테이블은 외래키로 연관관계를 맺는다.
Author And Source
이 문제에 관하여([JPA 긴급학습 (4)] 연관 관계 - 객체의 참조와 외래키의 차이), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@red_gunny/JPA-긴급학습-4-연관-관계-객체의-참조와-외래키의-차이저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)