이 학습 자료는 김영한님의 인프런 강의를 참고해서 만들었습니다.
0. 매핑시 고려사항
- 다중성
- 다대일 :
@ManyToOne
- 일대다 :
@OneToMany
- 일대일 :
@OneToOne
- 다대다 :
@ManyToMany
→ 실무에서 쓰면 안된다.
- 다대일 :
- 단방향, 양방향
- 테이블 : 외래 키 하나로 양쪽 조인 가능, 사실 방향이라는 개념X
- 객체 : 참조용 필드가 있는 쪽으로만 참조 가능, 한쪽만 참조하면 단방향, 양쪽이 서로 참조하면 양방향(단반향 2개)
- 연관관계 주인
- 외래 키를 관리하는 참조
- 주인의 반대편 : 단순 조회만 가능
1. 다대일 [N:1] 관계
1.1 다대일 단방향
- 가장 많이 사용하는 연관관계
- 다대일의 반대는 일대다
1.2 다대일 양방향
- 외래 키가 있는 쪽이 연관관계 주인
- 양쪽을 서로 참조하도록 개발
2. 일대다 [1:N] 관계
2.1 일대다 단방향
- 일(1)이 연관관계의 주인
- 테이블의 일대다 관계는 다(N) 쪽에 외래 키가 있음
- → 반대편 테이블의 외래 키를 관리하는 특이한 구조가 생성 → 유지보수↓
@JoinColumn
을 꼭 사용해야 한다. → 중간 테이블이 생겨 성능↓, 유지보수↓- 단점
- 엔티티가 관리하는 외래 키가 다른 테이블에 존재
- 연관관계 관리를 위해 추가로 UPDATE SQL 실행
- 다대일 양방향 매핑을 사용 권장
2.2 일대다 양방향
- 공식적으로 존재X
@JoinColumn(insertable = false, updatable = false)
로 사용- 읽기 전용 필드를 사용해서 양방향 처럼 사용한다.
3. 일대일 [1:1] 관계
- 일대일 관계는 그 반대도 일대일 관계이다.
- 주 테이블이나 대상 테이블 중에 외래 키 삽입 위치 선택 가능
- 주 테이블(가장 많이 엑세스하는 테이블)에 외래키
- 객체지향 개발자 선호
- JPA 매핑이 편리
- 주 테이블을 조회할 때 대상 테이블에 데이터 유무 확인 가능, 하지만 값이 없으면 외래 키에 null을 허용 해야한다.
- 대상 테이블에 외래키
- 데이터베이스 개발자 선호
- 일대일관계에서 일대다 관계로 변경 시 테이블 구조를 유지할 수 있지만, 프록시 기능의 한계로 지연로딩이 안되고 항상 즉시 로딩이 된다.
- 주 테이블(가장 많이 엑세스하는 테이블)에 외래키
- 외래 키에 데이터베이스 유니크(UNI) 제약조건 추가
3.1 일대일 : 주 테이블에 외래 키 단방향
- 다대일 양방향 매핑과 유사
3.2 일대일 : 주 테이블에 외래 키 양방향
- 외래 키가 있는 곳이 연관관계의 주인
- 반대편은
mappedBy
적용
3.3 일대일 : 대상 테이블에 외래 키 단방향
- JPA에서 지원X
3.4 일대일 : 대상 테이블에 외래 키 양방향
- 일대일 주 테이블에 외래 키 양방향 방식과 동일함
4. 다대다 [N:M] 관계
@JoinToMany
,@JoinTable
을 사용- 관계형 데이터베이스는 테이블 2개로 다대다 관계를 표현할 수 없음.
- 객체는 컬렉션을 사용해서 객체 2개로 다대다 관계를 가질 수 있음.
- 실무에서 사용하면 안된다.
→ 연결 테이블을 엔티티로 바꾸고, 다대다 관계를 일대다, 다대일 관계로 만들어야 함
'ORM > JPA' 카테고리의 다른 글
자바 ORM 표준 JPA 프로그래밍 - 프록시와 연관관계 관리 (0) | 2021.08.19 |
---|---|
자바 ORM 표준 JPA 프로그래밍 - 고급 매핑 (0) | 2021.08.16 |
자바 ORM 표준 JPA 프로그래밍 - 연관관계 매핑 기초 (0) | 2021.08.12 |
자바 ORM 표준 JPA 프로그래밍 - 엔티티 매핑 (0) | 2021.08.10 |
자바 ORM 표준 JPA 프로그래밍 - 영속성 관리 (0) | 2021.08.09 |