연관관계가 필요한 이유
- 테이블 :
외래키
로 조인하여 연관된 테이블 찾음 - 객체 :
참조
를 사용해서 연관된 객체를 찾음
⇒ 외래키 ≠ 참조 : 패러다임의 차이가 있기 때문에 협력관계를 만들기 위해서는 연관관계 매핑이 필요하다.
단방향 연관관계
- 객체 지향 모델링
@ManyToOne
과@JoinColumn(name = "매핑할 테이블의 외래키 이름")
으로 객체의 참조와 테이블의 외래키를 매핑한다.
양방향 연관관계와 연관관계의 주인
양방향 매핑
- 양쪽 참조 가능
- N측에는 단방향 연관관계 설정과 마찬가지로 설정해준다.
- 1측에는
@OneToMany(mappedBy = "~")
와 함께 컬렉션을 추가해준다.
연관관계의 주인과 mappedBy
객체와 테이블의 관계를 맺는 차이
객체 연관관계 : 단방향 연관관계 2개 = 양방향 매핑
회원 → 팀 1개(단방향)
팀 → 회원 1개(단방향)
⇒ 이 두개가 합쳐져서 양방향 매핑처럼 보이게 한다.
테이블 연관관계 : 연관관계 1개
- fk 하나로 회원 ↔ 팀의 연관관계 1개(양방향)
- 외래키 하나로 두 테이블의 연관관계를 관리한다.
연관관계의 주인(Owner)
- 양방향 매핑 시, 둘 중 하나로 외래키를 관리해야 한다. 예를 들어 Member가 다른 팀을 들어가고 싶으면 어떤 값으로 외래키를 관리해야 할지 애매해진다!
- 연관관계 주인만이 외래키를 관리 = 변경(등록, 수정)할 수 있다
- 주인이 아닌 쪽은 읽기만 가능하다
- 주인이 아닌 쪽은
mappedBy
속성으로 주인을 지정해준다. - 주인은 외래키가 있는 N측을 주인으로 지정한다.
'개발하자 > 🍃 SpringBoot' 카테고리의 다른 글
[자바 ORM 표준 JPA 프로그래밍 - 기본편] 03. 영속성 관리 (0) | 2022.09.18 |
---|---|
[자바 ORM 표준 JPA 프로그래밍 - 기본편] 02. JPA 시작 (0) | 2022.09.10 |
[ZEJE] 스프링부트 No serializer found for class ~ and no properties discovered to create BeanSerializer 에러 해결 (0) | 2022.09.04 |
[SpringBoot] ec2에 배포했을 때 Timezone 한국 시간으로 설정하기 (0) | 2022.08.06 |