[JPA 프로그래밍 - 기본편] 다양한 연관관계 매핑
연관관계 매핑시 고려사항
- 다중성
- 다대일 :
@ManyToOne
- 일대다 :
@OneToMany
- 일대일 :
@OneToOne
- 다대다 :
@ManyToMany
, 다대다는 실무에서 사용하면 안됨
- 다대일 :
- 단방향, 양방향
- 테이블
- 외래 키 하나로 양쪽 조인 가능
- 객체
- 참조용 필드가 있는 쪽으로만 참조 가능
- 한쪽만 참조하면 단방향
- 양쪽이 서로 참조하면 양방향
- 테이블
- 연관관계의 주인
- 연관관계의 주인 : 외래 키를 관리하는 참조
- 주인의 반대편 : 외래 키에 영향을 주지 않음, 단순 조회만 가능
다대일 [N:1]
- 다대일 단방향 : 외래키를 기준으로 연관된 참조를 넣어서 매핑 걸면 됨
- 다대일 양방향
- 외래 키가 있는 쪽이 연관관계의 주인 (N:1에서 N이 연관관계 주인)
- 양방향으로 참조한다고 해도 테이블에는 전혀 영향을 주지 X (테이블은 이미 외래키로 관리중)
일대다 [1:N]
- 1이 연관관계 주인일때 (1 방향에서 외래키를 관리할 때)
- 권장하지는 않음
일대다 단방향
- 객체쪽에서 1이 N을 참조(Team이 Member를 참조)
- 테이블 일대다 관계는 항상 다(N)쪽에 외래 키가 있음 (Member에 외래키 존재)
- Team의 List members 값을 바꿨을 때 다른 테이블의 외래키(Member의 Team_ID)를 업데이트
- 객체와 테이블의 차이 때문에 반대편 테이블의 외래 키를 관리하는 특이한 구조
- 일대다 단방향 매핑보다는 다대일 양방향 매핑을 사용
일대다 양방향
@JoinColumn(insertable=false, updatable=false)
> N쪽에 읽기 전용 필드를 사용해서 양방향 처럼 사용- 다대일 양방향을 사용하는 것이 좋음
일대일 [1:1]
- 주 테이블이나 대상 테이블 중에 외래 키 선택 가능
- 주 테이블에 외래 키 : 주 객체가 대상 객체의 참조를 가지는 것 처럼 주 테이블에 외래 키를 두고 대상 테이블을 찾음
- 대상 테이블에 외래 키 : 대상 테이블에 외래 키가 존재
- 외래 키에 데이터베이스 유니크(UNI) 제약조건 추가
일대일 단방향 : 주 테이블에 외래 키 단방향
- Member(주테이블)에 외래키가 있고, Member가 Locker를 참조할 때
public class Member{
@OneToOne
@JoinColumn(name="LOCKER_ID")
private Locker locker;
...
}
- 다대일
@ManyToOne
단방향 매핑과 유사
일대일 양방향 : 주 테이블에 외래 키 양방향
- Member(주테이블)에 외래키가 있고, Member와 Locker가 서로 참조할 때
public class Member{
@OneToOne
@JoinColumn(name="LOCKER_ID")
private Locker locker;
...
}
public class Locker{
@OneToOne(mappedBy="locker")
private Member member;
...
}
- 다대일 양방향 매핑 처럼 외래 키가 있는 곳이 연관관계의 주인
- 반대편은 mappedBy 적용
일대일 : 대상 테이블에 외래 키 단방향
- Locker에 외래키가 있고, Member(주테이블)가 Locker(대상테이블)를 참조할 때
- 단방향 관계는 JPA 지원X
일대일 : 대상 테이블에 외래 키 양방향
- Locker에 외래키가 있고, Member(주테이블)와 Locker(대상테이블)가 서로 참조할 때
- Locker를 연관관계 주인으로 잡아서 그냥 매핑하면 됨
- 사실 일대일 주 테이블의 외래 키 양방향과 매핑 방법은 같음
- 단점 : 지연로딩으로 설정해도 항상 즉시 로딩 됨
다대다 [N:M]
- 관계형 데이터베이스는 정규화된 테이블 2개로 다대다 관계를 표현할 수 없어서 연결 테이블을 추가해 일대다, 다대일 관계로 풀어내야함
- 객체는 컬렉션을 사용해서 객체 2개로 다대다 관계 가능
@ManyToMany
사용@JoinTable
로 연결 테이블 지정- 실무에서 사용 X
한계 극복 방법
- 연결 테이블용 엔티티 추가 (연결 테이블을 엔티티로 승격)
@ManyToMany
->@OneToMany
,@ManyToOne
출처
[인프런] 자바 ORM 표준 JPA 프로그래밍 - 기본편
Author And Source
이 문제에 관하여([JPA 프로그래밍 - 기본편] 다양한 연관관계 매핑), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jihyeonee/JPA-프로그래밍-기본편-다양한-연관관계-매핑저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)