# 단방향 연관관계

OOP가 지향하는 패러다임과 RDB가 지향하는 패러다임이 다르기 때문에 둘의 차이점으로 인한 개발의 어려움이 있다.

연관 관계\
객체 : 참조(Reference)\
테이블 : 외래키

객체의 참조와 테이블의 외래키를 어떻게 매핑하나?

용어 이해

* 방향 : 단방향, 양방향
* 다중성 : 다대일, 일대다, 일대일, 다대다
* **연관관계의 주인 : 객체 양방향 연관관계는 관리 주인이 필요⭐️⭐️⭐️⭐️**
* **OOP는 객체들의 연관성의 모음.**

**예제 시나리오**

* 회원과 팀이 있다.
* 회원은 하나의 팀에만 소속될 수 있다.\
  \=> 회원 - 팀 : 다대일 관계

1차 캐시에서 데이터 가져오기 때문에 SQL select 쿼리문이 나가지 않지만 굳이 눈으로 확인하고 싶다면 em.flush()로  현재 영속성 컨텍스트에 있는 데이터들을 DB에 업데이트해주고, em.clear()하면 영속성 컨텍스트가 다 지워지기 때문에 em.flush(), em.clear() 이후에 em.find()를 하면 SQL select 쿼리문을 새로 작성해서 쿼리 날리는 것을 확인할 수 있다!

객체 지향 모델링(ORM 매핑)

![](https://1863485745-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MeTGDBevaFvc3bwqqht%2F-MeYlqAJdEiNkiircyZS%2F-MeYoFAHjDaVBi5dHc32%2FScreen%20Shot%202021-07-14%20at%203.59.58%20PM.png?alt=media\&token=fea35d34-7040-4948-b589-124f8d5e554b)

객체의 필드에 외래키를 그대로 가져오는 것이라 참조값(객체) 그 자체를 Member 내에 가져온다!

\=>연관관계 저장, 조회, 수정이 자유롭다!

* ManyToOne(디폴트 : fetch = FetchType.LAZY)\
  : 쿼리가 분리되서 나간다.
* 연관관계 수정\
  member.setTeam(newTeam) : FK가 업데이트된다!
