JPA 연관관계 매핑 - 연관관계 주인

Growing_HJ·2024년 7월 29일

JPA

목록 보기
6/15

mapped By, 연관관계의 주인

🌟두 객체 연관관계 중 하나를 정해서 데이터베이스 외래 키를 관리하는 주인 🌟
객체를 양방향 연관관계로 만들면 연관관계의 주인을 정해줘야 함.

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 속성이 없다. 🌟

0개의 댓글