JPA에서 연관관계란 단방향 매핑과 양방향 매핑으로 이루어져 있다.
단방향 매핑이란 테이블이 A, B 2개가 있다고 가정했을 때 말그대로 A -> B로만 조회가 가능하다라는 개념이고
양방향 매핑이란 A->B가 가능하고 반대로 B->A 또한 가능한 개념이다.
양방향 매핑을 지양하라는 말이 들리던데 왜 그런건가요?
ERD의 중심에 있는 Member라는 테이블이 있다고 가정해보자.
Member와 주변 여러 테이블 (예시로 7개)과 매핑이 되어있다고 가정해볼 때
양방향으로 매핑을 해버리면 mapped by에 맞는 변수를 세팅해야하기 때문에 지양해야한다.
말그대로 코드가 복잡하기 때문인 것.
연관 관계의 주인이 무엇인가요?
연관 관계의 주인이란 외래키를 가지고 있는 테이블이라고 생각하자.
(many to one 관계일 때 many 쪽에 외래키가 존재, 해당 엔티티가 연관관계의 주인이 된다.)
member 테이블과 team 테이블이 있다고 가정했을 때
member와 team 관계는 many to one 관계이다.
그렇기에 member에 외래키가 존재하고 member를 연관 관계의 주인이라고 한다.
왜냐하면 외래키를 쥐고 있기 때문에 entity 상에서 team으로 접근이 가능하기 때문이다.
반대로 team은 외래키가 없기 때문에 entity 상에서 member로 접근이 불가능한 형태이다.
(mapped by가 있으면 접근은 가능하긴 하지만 뒤에서 다루도록 하자.)
핵심은 무엇인가요?
앤티티 상에선 외래키를 가지고 있으면 연관관계 주인이라고 하고
연관 관계 주인인 엔티티는 외래키를 마음대로 수정할 수 있다.
주인이 아닌 엔티티는 외래키 대상으로 read only이다.
db 상에선 외래키를 가지고 있는 것 만으로 양방향 조회가 가능하지만
엔티티 상에선 외래키를 가지고 있다고 해서 양방향 조회가 가능하지 않고
외래키를 가지고 있는 엔티티가 외래키를 가지고 있지 않은 엔티티 방향으로 조회가 가능하다.
엔티티 상에서도 양방향 조회가 가능하게 만드려면 어떻게 해야할까?
mapped by를 활용하여 외래키를 가지고 있는 엔티티를
주인이 아닌 엔티티 측에서 변수로 가지고 있어야 한다.
'JPA' 카테고리의 다른 글
초보자도 이해할 수 있는 JPA, Hibernate, Spring Data JPA의 차이점 (0) | 2023.08.30 |
---|---|
[JPA] @ManyToMany, 다대다 관계 다루는 법 (0) | 2023.02.19 |
[JPA] 즉시로딩(EAGER)과 지연로딩(LAZY)의 차이점? (0) | 2023.02.19 |