BE전문가 프로젝트

양방향 연관관계와 연관관계의 주인 1 - 기본 본문

JPA

양방향 연관관계와 연관관계의 주인 1 - 기본

원호보고서 2022. 10. 17. 22:53
package hellojpa;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;

@Entity
public class Team {

    @Id
    @GeneratedValue
    @Column(name="TEAM_ID")
    private Long id;

    @Column(name="USERNAME")
    private String name;

    @OneToMany(mappedBy = "team")//어떤것과 연결되어 있는지(Member에 보면 team(변수명)을 볼 수 있다)
    private List<Member> members = new ArrayList<>(); //ArrayList로 초기화 하는 것(관례) add시 nullpoint가 안뜬다.

}

mappedBy

- 객체과 테이블간에 연관관계를 맺는 차이를 이해해야 한다.

 

객체와 테이블이 관계를 맺는 차이

객체 연관관계

  • 회원 -> 팀 연관관계 1개(단방향)
  • 팀 -> 회원 연관관계 1개(단방향)

객체를 잘 살펴보면 member에서 team으로 가는 단방향 연관관계 1개, Team에서 member로 가는 단방향 연관관계 1개  총 2개가 있다는 것을 확인 할 수 있다.

 

테이블 연관관계

  • 회원 <-> 팀 연관관계 1개(양방향)

 

객체의 양방향 관계

  • 객체의 양방향 관계는 사실 서로 다른 두개의 단방향 관계를 의미한다
  • 객체를 양방향으로 참조시 단방향 연관관계를 2개 만들어야 한다.

테이블의 양방향 관계

  • 테이블은 외래 키 하나로 두 테이블의 연관관계를 관리
  • MEMBER.TEAM_ID 외래 키 하나로 양방향 연관관계를 가짐(양쪽으로 JOIN 가능)

 

연관관계를 맺을 때 Member에 있는 team으로 외래키를 관리해야할지, Team에 있는 members로 외래키를 관리해야할 지 둘 중에 하나를 주인으로 정해야하며 이것을 연관관계의 주인이라고 한다

 

연관관계의 주인(Owner)

주인이 되는 대상

  • 외래 키가 있는 곳을 주인으로 정해라(primary key가 주인이여도 되지만 성능 관리 측면에서 더 유리함)
  • 여기서는 Member.team이 연관관계의 주인

양방향 매핑의 규칙

  • 객체의 두 관계중 하나를 연관관계의 주인으로 지정
  • 연관관계의 주인만이 외래 키를 관리(등록, 수정)
  • 주인이 아닌쪽은 읽기만 가능
  • 주인은 mappedBy 속성 사용x
  • 주인이 아니면 mappedBy 속성으로 주인 지정

'JPA' 카테고리의 다른 글

다대일(N:1)  (0) 2022.10.18
양방향 연관관계와 연관관계의 주인 2 - 주의점  (0) 2022.10.18
연관관계 매핑 기초  (0) 2022.10.09
쇼핑몰 만들기 1. 요구사항 분석과 기본 매핑  (0) 2022.10.09
기본 키 매핑  (0) 2022.10.08
Comments