개발공부/[Spring]김영한_ORM표준 JPA프로그래밍

[spring] 양방향 연관관계&연관관계의 주인

개발자 덕구🐾 2022. 8. 18. 11:39
728x90

객체는 참조로 연관된 객체를 찾고

테이블은 외래키로 조인을 통해 연관된 테이블을 찾는다. 

 

 

양방향 연관관계 

-> 팀과 멤버를 생각할 때 멤버를 보고 팀을 찾는 것팀을 보고 멤버를 찾는 두가지가 모두 되는 관계를 말한다. 

 


 

 

객체 

객체를 양방향으로 참조하려면  단방향 연관관계가 2개를 만들어야한다. 

이것을 양방향 연관관계라고 이름 붙였다

 

팀 -> 멤버

멤버 -> 팀 

 

테이블 

테이블은 하나의 FK를 이용해 두 테이블이 연관관계를 관리한다.  (양쪽으로 join가능)

-> 연관관계가 1개 있다.

 

회원 <-> 팀 

 

 

 

 


 

 

 

<Team 엔티티 코드에 추가>

@OneToMany(mappedBy = "team")
List<Member> members = new ArrayList<Member>();

팀 입장에서 보면 Team이 1이고 Member가 N이므로 @OneToMany 어노테이션을 붙여준다. 

mappedBy를 통해 Member의 어느 필드와 매핑되었는지 알려준다. 

"team"은 Member에 있는 필드명이다. 

 

 

그런데..!!

Member에도 Team이 있고

Team에도 members가 있다. 

 

 

 

그러면 어떻게 연결을 해야 올바르게 연동이 될까?

둘 중 하나를 외래 키로 관리하면 된다. 

 

 

 

 

 


 

 

 

 

연관관계의 주인 (Owner)

객체의 두 관계중 하나를 연관관계의 주인으로 지정한다 

- 연관관계의 주인만이 외래 키를 관리 (등록, 수정)

- 주인이 아닌쪽은 읽기만 가능 

 

 

 

mappedby가 설정된 것은 주인이 아니다. 

주인이 아닌 필드가 mappedBy 속성을 통해 주인을 지정한다. 

 

 

 

그러면 누구를 주인으로 해야하지?

=> 외래 키가 있는 곳을 주인으로 정해라  (DB 입장에서는 N(다)이 FK) 

N쪽이 연관관계의 주인 

 

 

 

 

 


 

 

 

 

양방향 연관관계의 경우 순수 객체 상태를 고려해서 양쪽에 값을 설정하자. 

->  연관관계 편의 메서드를 생성하자. ( 메서드는 1개만) [ 잊어먹을 수 있으니까]

 

 

 

단방향 매핑을 잘하고 양방향은 필요할 때 추가! 

처음에는 일단 단방향 매핑으로 설계를 끝내라!

양방향 매핑은 반대 방향으로 조회기능이 추가된 것 뿐

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형