chapter 05 연관 관계 매핑 기초
엔티티들은 대부분 다른 엔티티와 연관관계가 있다.
예를 들어 주문 엔티티는 어떤 상품을 주문 했는 지 알기 위해 상품 엔티티와 연관관계가 있고 상품 엔티티는 카테고리, 재고 등 또 다른 엔티티와 관계가 있다. 그런데 객체는 참조(주소)를 사용해서 관계를 맺고 테이블은 외래 키를 사용해서 관계를 맺는다.
방향, 다중성(1:N, N:1, 등), 연관관계 주인
[5.1]
[5.4.1] 양방향 매핑의 규칙 : 연관관계의 주인
연관관계의 주인만이 데이터베이스 연관관계와 매핑되고 외래 키를 관리(등록, 수정, 삭제)할 수 있다. 반면에 주인이 아닌 쪽은 읽기만 할 수 있다.
어떤 연관관계를 주인으로 정할지는 mappedBy 속성을 사용하면 된다.
다음 두 코드를 보자.
# 회원 -> 팀(Member.team)방향
class Member { @ManyToOne @JoinColumn(name="TEAM_ID") private Team team; ... } |
#팀 -> 회원(Team.members) 방향
class Team { @OneToMany private List<Member> members = new ArrayList<>(); ... } |
연관 관계의 주인을 정한다는 것은 사실 외래 키 관리자를 선택하는 것이다.
여기서는 회원 테이블에 있는 TEAM_ID 외래 키를 관리할 관리자를 선택해야 한다. 그림 5.7을 보자. 만약 회원 엔티티에 있는 Member.team을 주인으로 선택하면 자기테이블에 있는 외래키를 관리하면 된다. 하지만 팀엔티티에 있는 Team.members를 주인으로 물리적으로 전혀 다른 테이블의 외래 키를 관리해야 한다. 왜냐하면 이 경우 Team.members가 있는 Team 엔티티는 TEAM 테이블에 매핑되어 있는 데 관리해야 할 외래키는 MEMBER 테이블에 있기 때문이다.
* 연관관계의 주인은 테이블에 외래 키가 있는 곳으로 정해야 한다.
[JPA] 연관관계 매핑 기초 #2 (양방향 연관관계와 연관관계의 주인)
이번 글에서는 에 대해 알아보겠습니다. 이 시리즈 글은 김영한 님의 강의, 책을 보고 적은 것임을 알려드립니다. (강추) 오타 및 피드백 환영합니다. 양방향 연관관계 이전 글에서는 회원에서
velog.io
참고
자바 ORM 표준 JPA 프로그래밍