🌟두 객체 연관관계 중 하나를 정해서 데이터베이스 외래 키를 관리하는 주인 🌟
객체를 양방향 연관관계로 만들면 연관관계의 주인을 정해줘야 함.
1. mapped By 속성이 필요한 이유
<객체의 연관관계> 1. 회원 -> 팀 연관관계 1개 (단방향) 2. 팀 -> 회원 연관관계 1개 (단방향) ------------------------------ <테이블의 연관관계> 1. 회원 <-> 팀의 연관관계 1개 (양방향) 테이블은 외래 키 하나로 두 테이블의 연관관계를 관리.
- 엔티티를 양방향 연관관계로 설정하면 객체의 참조는 둘인데 외래키는 하나로, 둘 사이에 차이가 발생한다. 이러한 차이로 인해 JPA 에서는 두 객체 연관관계 중 하나를 정해서,
테이블의 외래키를 관리해야 하는 것. -> 연관관계의 주인
2. 양방향 매핑의 규칙 : 연관관계의 주인
양방향 연관관계 매핑 시, 지켜야 할 규칙
- 두 연관관계 중 하나를 연관관계의 주인으로 정해야 함.
❗️연관관계의 주인만이 데이터베이스 연관관계와 매핑되고, 외래키를 관리할 수 있다.❗️
❗️반면에 주인이 아닌 쪽은 읽기만 가능 ❗️
✔️ 주인은 mappedBy 속성을 사용하지 않는다.
✔️ 주인이 아니면 mappedBy 속성을 사용해서 속성의 값으로 연관관계의 주인을 정해야 한다.
➕ 3. 연관관계의 주인을 정한다 = 외래 키 관리자를 선택하는 것. ➕
연관관계의 주인은 테이블에 외래 키가 있는 곳으로 정해야 함. 위의 그림에서는 회원 테이블이 외래키를 가지고 있으므로Member.team이 주인이 된다.
주인이 아닌 Team.Members 에는MappedBy = "team"속성을 사용해서 주인이 아님을 설정한다.
MappedBy = "team"속성의 값으로는 연관관계의 주인인 team 을 주면 된다.
여기서 mappedBy의 값으로 사용된 team 은 연관관계의 주인인 Member 엔터티의 team 필드를 말한다.
class Team { // mappedBy 속성의 값은 연관관계의 주인인 Member.team @OneToMany(mappedBy = "team") }🌟 데이터베이스 테이블의 다대일, 일대다 관계에서는 항상 다쪽이 외래 키를 가진다.
다 쪽인 @ManyToOne 은 항상 연관관계의 주인이 되므로 mappedBy를 설정할 수 없다.
따라서 @ManyToOne 에는 mappedBy 속성이 없다. 🌟