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 |