이번 시간에는 양방향 연관관계에 대해 알아보겠다!!!! (좀 빡센 거 같다...)
단방향 연관관계에 대해서 알아볼 때 이런 테이블과 Entity들을 만들었었다. (대충 재활용하겠다는 소리)
객체에서 말하는 양방향 연관관계는 무엇일까?
먼저 지금 Entity를 살펴보자!!! Student객체에서 Club을 얻어오고 싶으면 'student.getClub();'으로 얻어올 수 있다.
하지만 Club에서 Student를 얻어오고 싶으면 가능할까???? (불가능하다)
즉, Student Entity에서 Club Entity를 참조할 수 있지만, 그 반대는 불가능하다. Student → Club으로 향하는 단방향 연관관계라고 할 수 있다.
그러면 현 상황에서 우리는 Student↔Club이 성립하게 되면 양방향이라고 말할 수 있을 것이다.
그래서 Club에서 Student를 참조할 수 있게 하기 위해 Club Entity를 다음과 같이 수정했다.
students가 추가됐고, List<Student> 타입이다.
타입이 List인 이유는 천천히 알아가도록 하고, List의 Generic Type으로 Student를 지정했으므로,
Club에서 Student를 참조할 수 있게 됐다. 즉 양방향 관계가 성립된 것이다.
하지만 객체에서 말하는 양방향 관계에는 약간(?)의 함정이 있다. 지금 객체 구조를 보면 사실 단방향 관계가 2개 있는 것이다.
Student → Club과 Club → Student로 가는 단방향 관계가 말이다.
최종적으로 양방향이 성립되지만, 이 과정 속에는 단방향 연관관계 2개가 합쳐져있다는 것을 간과해서는 안 된다.
DB에서의 양방향 연관관계
DB에서 양방향 연관관계는 외래키(FK)만 있으면 성립된다. Student Table과 Club Table을 통해 살펴보도록 하자!!!!
Student → Club을 어떻게 할 수 있을까? 간단하다. 아래 SQL문을 참고하자!!!
SELECT * FROM STUDENT S JOIN CLUB C ON S.CLUB = C.ID;
이번에는 Club → Student를 알아보자!!!
SELECT * FROM CLUB C JOIN STUDENT S ON S.CLUB = C.ID;
정말 쉽다... CLUB과 STUDENT의 순서만 바꿔주면 끝이다!!!
DB는 단방향이고 뭐고 외래키만 있으면 게임 끝난다. 그냥 외래키 == 양방향이 성립한다는 것이다.
'JPA > 양방향연관관계' 카테고리의 다른 글
N:M(다 대 다) 매핑 4: 양방향 연관관계 편의 메서드 (0) | 2021.08.14 |
---|---|
N:M(다 대 다) 매핑 3: 매핑테이블을 엔티티로 만들기 (0) | 2021.05.22 |
N:M(다 대 다) 매핑 2: @ManyToMany와 @JoinTable (0) | 2021.05.21 |
N:M(다 대 다) 매핑 1: 매핑테이블 (0) | 2021.05.20 |
N:1 양방향 연관관계 매핑하기 (0) | 2021.04.08 |