일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- fixedDelay
- 자바ORM표준프로그래밍
- 캐쉬가능
- hibernate.dialect
- Invalid bound statement (not found)
- JPA
- ERROR TYPE : org.apache.ibatis.binding.BindingException
- RFC723x
- KAKAOLOGINAPI
- 매핑정보가없는필드
- 네이버 연결된 서비스
- @Table
- 네이버로그인API
- SpringBoot
- org.apache.ibatis.binding.BindingException
- DB방언
- HTTPMESSAGE
- Git
- http
- 데이터베이스 방언
- gitrevert
- @Entity
- 멱등활용
- 무상태프로토콜
- anyMatch
- HTTP3
- 김영한JPA
- initialDelay
- Transaction not successfully started
- gitreset
- Today
- Total
twocowsong
객체 연관관계와 테이블의 연관관계 본문
연관관계 중에서는 N : 1 단방향 관계를 가장 먼저 이해해야 합니다.
지금부터 회원과 팀의 관계를 통해 N : 1 단방향 관계를 알아보겠습니다.
- 회원과 팀이 있습니다.
- 회원은 하나의 팀에만 소속될 수 있습니다.
- 회원과 팀은 N : 1 관계입니다. (다수의 인원이 한팀에 가입할 수 있습니다.)
객체 연관관계
- 회원 객체는 Member.team필드로 팀 객체와 연관관계를 맺습니다.
- 회원 객체와 팀 객체는 단방향 관계입니다.
- 회원은 Member.team 필드를 통해서 팀을 알 수 있지만 반대로 팀은 회원을 알 수 없습니다.
- 예를 들어 member -> team의 조회는 member.getTeam()으로 가능하지만 반대 방향인 team -> member를 접근하는 필드는 없습니다.
테이블 연관관계
- 회원 테이블은 TEAM_ID 외래키로 팀 테이블과 연관관계를 맺습니다.
- 회원 테이블과 팀 테이블은 양방향 관계입니다.
- 회원 테이블의 TEAM_ID 외래 키를 통해서 회원과 팀을 조인할 수 있습니다.
- 예를 들어 MEMBER 테이블의 TEAM_ID외래 키 하나로 MEMBER JOIN TEAM 과 TEAM JOIN MEMBER 둘 다 가능합니다.
키하나로 양방향으로 조인하는 SQL문입니다.
// MEMBER이 기준 테이블의 경우
SELECT *
FROM MEMBER M
INNER JOIN TEAM T
ON M.TEAM_ID = T.TEAM_ID
// TEAM이 기준 테이블의 경우
SELECT *
FROM TEAM T
INNER JOIN MEMBER M
ON T.TEAM_ID = M.TEAM_ID
객체 연관관계의 테이블 연관관계의 가장 큰 차이
참조를 통한 연관관계는 언제나 단방향입니다.
객체간에 연관관계를 양방향으로 만들고싶으면 반대쪽에도 필드를 추가해서 참조를 보관해야합니다.
결국 연관관계를 하나 더 만들어야합니다.
이렇게 양쪽에서 서로 참조하는것을 양방향 연관관계라 합니다.
하지만 정확하게 이야기하면 객체의 양방향 연관관계는 올바르지않습니다.
서로 다른 단방향 관계 2개일 뿐입니다.
객체의 단방향, 양방향 연관관계입니다.
// 단방향 연관관계
class A {
B b;
}
Class B {}
// 양방향 연관관계
class A {
B b;
}
Class B {
A a;
}
정리하자면 아래와 같습니다.
- 객체는 참조(주소)로 연관관계를 맺습니다.
- 테이블은 외래키로 연관관계를 맺습니다.
이 둘은 비슷해 보이지만 매우 다른특징을 가집니다.
연관된 데이터를 조회할 때 객체는 참조(a.getB().getC())를 사용하지만 테이블은 조인을 사용합니다.
참조를 사양하는 객체의 연관관계는 단방향입니다.
- A -> B (a,b)
외래키를 사용하는 테이블의 연관관계는 양방향입니다.
- A JOIN B 가 가능하면 반대로 B JOIN A 도 가능합니다.
- 객체를 양방향으로 참조하라면 단방향을 2개 만들어야합니다
- A -> B (a, b) / B -> A (b, a)
'IT > JPA' 카테고리의 다른 글
테이블 연관관계 (0) | 2022.05.27 |
---|---|
순수한 객체 연관관계 (0) | 2022.05.27 |
연관관계 매핑 기초 (0) | 2022.05.23 |
[실전 예제] 요구사항 분석과 기본 매핑 (0) | 2022.05.22 |
중간 정리 (0) | 2022.05.21 |