1. 매핑 관계에서 다대일? 단방향? 양방향?
매핑을 설명할 때 다대일, 단방향, 양방향 이러한 이야기가 나오곤한다.
먼저 다대일의 개념을 설명하면 다음과 같다. 학창 시절 학생들은 특정 반에 속해있다. 이러한 관계를 다대일이라고 한다.
이를 표현하면 아래와 같다.
그렇다면 단방향? 양방향은 무엇일까?
엔티티를 정의할 때 한쪽 엔티티에만 다른 엔티티를 정의하면 단방향 연관관계, 양쪽에 각각 정의를 하면 양방향 연관 관계라고 한다.
2. mappedBy?
JPA의 경우 mappedBy를 명시하지 않으면 두 엔티티가 양방향 관계임을 모르게 된다.
mappedBy란 JPA 엔티티의 양방향 연관관계에서 연관관계의 주인을 표기해주는 옵션이다.
3. 연관관계의 주인이란?
연관관계의 주인이란?
FK를 관리하게 되는 엔티티가 연관관계의 주인이 된다는 말이다.
FK는 관계를 표현하는데 있어 굉장히 중요한데 위의 예시에서 사용된 '학생-학급'의 관계에서 학생 테이블 입장에서는 class_id(FK)가 있으면 자신과 연결된 다른 테이블의 특정 관계하나를 찾을 수 있게됩니다. 그렇기 때문에 관계를 연결하고 특정 짓는데 더 강한 역할을 하는 것이 FK가 된다.
그렇기에 연관관계의 주인만이 외래키(FK)를 관리(등록, 수정, 삭제)할 수 있고 주인이 아닌쪽은 단순 읽기만 가능하게 된다.
이를 코드로 표현하면 아래와 같다.
※ 연관관계 매핑 규칙
· 연관관계의 주인은 mappedBy 속성을 사용하지 않는다.
· 주인이 아닌 엔티티에만 mappedBy 속성을 사용해서 속성의 값으로 연관관계의 주인을 지정해줘야 한다.
· 간단하게 말하면 연관관계의 주인은 외래키, 즉 FK가 있는 곳이 됩니다. 위의 예시에서 보면 '학생-학급' 관계에서는 FK를 가지고 있는 학생 테이블이 연관관계의 주인이 됩니다.
(보통 다대일 관계에서 다 쪽이 연관관계의 주인)
'Backend > Spring' 카테고리의 다른 글
Spring JPA Bulk Update 처리 (0) | 2022.03.07 |
---|---|
Spring Data JPA -Cascade와 orphanRemoval? (0) | 2022.03.03 |
Spring OSIV? (0) | 2022.03.02 |
[JPA] N+1 문제 (0) | 2022.02.28 |
JPA 즉시로딩(Eager Loading)과 지연로딩(Lazy Loading)? (0) | 2022.02.24 |