[JPA 긴급학습 (4)] 연관 관계 - 객체의 참조와 외래키의 차이

2104 단어 JPAJPA

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개★다.

즉, 객체는 참조로 연관관계를 맺고, 테이블은 외래키로 연관관계를 맺는다.

좋은 웹페이지 즐겨찾기