728x90
객체 연관관계 vs 테이블 연관관계
- 객체는 참조(주소)로 연관관계를 맺는다
- 테이블은 외래키로 연관관계를 맺는다.
- 연관된 데이터를 조회할때 객체는 참조( a.getB().getC() ) 를 사용하고,
- 테이블은 join(조인)을 사용한다.
- 참조를사용하는 객체의 연관관계는 단방향이다
- A -> B (a,b)
- 외래키를 사용하는 테이블의 연관관계는 양방향이다.
- A join B 가 가능하면 B join A도 가능하다
- 객체를 양방향으로 참조하려면 단방향 연관관계를 2개 만들어야한다.
A -> B (a,b)
B -> A (b,a)
1. 객체 연관관계
순수한 객체 연관관계
( JPA를 사용하지 않은 순수한 회원클래스, 팀 클래스)
public class Member {
private String id;
private String username;
private Team team; //팀의 참조를 보관
public void setTeam(Team team) {
this.team = team;
}
//Getter, Setter...
}
public class Team {
private String id;
private String name;
//Getter, Setter,...
}
동작코드 : 회원1과 회원2를 팀1에 소속시키자.
public static void main(String[] args) {
Member member1 = new Member("member1", "회원1");
Member member2 = new Member("member2", "회원2");
Team team1 = new Team("team1", "팀1");
member1.setTeam(team1);
member2.setTeam(team1);
Team findTeam = member1.getTeam(); //객체 그래프 탐색
}
이처럼 객체는 참조를 사용해서 연관관계를 탐색할 수 있는데
이것을 "객체 그래프 탐색" 이라고 한다.
2. 테이블 연관관계
데이터베이스 테이블은 외래키 제약조건으로 연관관계를 맺는다.
데이터베이스 연관관계 테이블 DDL / DML
CREATE TABLE MEMBER (
MEMBER_ID VARCHAR(255) NOT NULL,
TEAM_ID VARCHAR(255),
USERNAME VARCHAR(255),
PRIMARY KEY (MEMBER_ID)
)
CREATE TABLE TEAM (
TEAM_ID VARCHAR(255) NOT NULL,
NAME VARCHAR(255),
PRIMARY KEY(TEAM_ID)
)
ALTER TABLE MEMBER ADD CONSTRAINT FK_MEMER_TEAM
FOREIGN KEY (TEAM_ID)
REFERENCES TEAM
INSERT INTO TEAM(TEAM_ID, NAME) VALUES ('team1','팀1');
INSERT INTO MEMBER(MEMBER_ID, TEAM_ID, USERNAME) VALUES ('member1','team1','회원1');
INSERT INTO MEMBER(MEMBER_ID, TEAM_ID, USERNAME) VALUES ('memeber2','team1','회원2');
소속된 팀 조회해보기
SELECT T.*
FROM MEMBER M
JOIN TEAM T ON M.TEAM_ID = T.TEAM_ID
WHERE M.MEMBER_ID = 'member1'
이처럼 데이터베이스는 외래키를 사용해서 연관관계를 탐색할 수 있는데
이것을 "조인" 이라고 한다.
'JPA' 카테고리의 다른 글
JPA시작(10)_연관관계 매핑(N:1 / 1:N 양방향) (2) | 2021.06.08 |
---|---|
JPA시작(9)_연관관계 매핑(N:1, 단방향) / 연관관계 사용(등록, 수정, 삭제, 조회) (0) | 2021.06.08 |
JPA시작(7)_필드와 컬럼 매핑_속성에 따른 DDL 생성확인 @Column, @Enumerated, @Temporal, @Lob, @Transient, @Access (0) | 2021.06.07 |
JPA시작(6)_기본키 매핑 (직접할당, 자동생성) (0) | 2021.06.07 |
JPA시작(5)_데이터베이스 스키마 자동생성 (0) | 2021.06.07 |